以下是引用liufashuai在2013-8-7 09:43:32的发言:
就是想。你那样做效率真的比这样好么
就是想。你那样做效率真的比这样好么
用二分找边界,通常情况下比我写的顺序要高...
不信,自己证明
我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
int element_count(int * set, int len, int e) { int f, a, b, t; for(a = 0, b = len - 1; a < b; set[t = a + b >> 1] < e ? (a = t + 1) : (b = t)); for(f = a, b = len - 1; a < b; set[t = a + b >> 1] <= e ? (a = t + 1) : (b = t)); return b - f; }
int element_count(int * set, int len, int e) { int t; if(set[0] == e && set[len - 1] == e) return len; if(set[0] > e || set[len - 1] < e) return 0; t = len / 2; return element_count(set, t, e) + element_count(set + t, len - t, e); }