本文共 1099 字,大约阅读时间需要 3 分钟。
题目:统计一个数字在排序数组中出现的次数,例如 {1,2,3,3,3,3,4,5},3 出现了4次 。
代码解决
#includeint s[8]={ 1,2,3,3,3,3,4,5};int findfirst(int x){ int left = 0, right = 7; while(left <= right){ int mid = (left + right)/2; if(s[mid] == x){ if((mid <= 0) || s[mid-1] != x) return mid; right = mid - 1; } else if(s[mid] > x) right = mid - 1; else left = mid + 1; } return -1;}int findlast(int x){ int left = 0, right = 7; while(left <= right){ int mid = (left + right)/2; if(s[mid] == x){ if((mid >= 7) || s[mid+1] != x) return mid; left = mid + 1; } else if(s[mid] > x) right = mid - 1; else left = mid + 1; } return -1;}void Print(int x){ int first = findfirst(x); int last = findlast(x); if(last ==-1 || first == -1) printf("%d 不存在\n",x); else printf("%d 出现了 %d 次\n",x, findlast(x) - findfirst(x)+1);}int main(){ int x = 3; Print(x); x = 5; Print(x); x = 6; Print(x);}
结果