2014 七月 | 重归混沌的BLOG

生成不重复随机数

今天碰到一个生成不重复随机数题目, 题目类似如下: 在一个1K的数组中生成1~1M之间的随机数, 1K中的随机数不能重复. 第一反应就是暴力查询, 每生成一次就去已有的数据查询, 时间复杂度为O(n2). 效率极差. 仔细思考后发现这样一种特性, 数值空间为1~1M, 需要取出1K个数据, 1M = 1K * 1K 类似下面代码: int buff[1024]; int tmp = 0; for (i = 0; i < 1024; i++) { tmp += 1024; buff[i] = tmp; } 上面的代码如果执行完毕那么tmp的结果会成为1M. 将一个0~1023之间的……

闭包的好处

今天看了swift中的闭包一节, 看到最后值捕获时我才明白闭包的便利性. 如果没有值捕获, 那么支持闭包的特性跟C语言的函数指针比除了可以创建匿名函数与函数嵌套定义外恐怕没有什么优势. 但是有了值捕获这一功能闭包可以大大增加写代码的便利性. 下面是swift的一个闭包的例子: func testclouser(t1 : Int) -> () -> Int { var tst = 3; func inc() -> Int { tst += t1; return tst; } return inc; } let fun = testclouser(9); let fun2 = testclous……

多线程调DLL

最近写代码一不小心又着了多线程的道, 背景如下: 前不久写了这样一个DLL: const wchar_t *a = L"xxxx"; const wchar_t *b = L"xxxx"; int do_something_a(struct axx *param_a) { ... } int do_something_b(struct bxx *param_b) { ... } 在do_something_a与do_something_b中分别用到了字符串a, b.本来这样相安无事, 可是很多地方会用到这个DLL的代码, 但是字符串a, b并不一样, 而字符中a, b可以根据param_a, param_b中的信息来生成, 本着代码正交性的原则, 将DLL……