我尝试通过修改二分查找算法来实现。
int search(int *a, int start,int end,int sum){
int s=start,e=end-1,m;
while(s <= e){
m=s+(e-s)/2;
if(a[m] == sum){
return m+1;
}
else if (a[m] < sum) {
s = m + 1;
}
else {
e = m - 1;
}
}
return m;}
上面的算法有什么问题吗?
最佳答案
int search(int *a, int start,int end, int sum) {
int s = start, e = end - 1, m;
while(s <= e) {
更简单的是
// m=s+(e-s)/2;
m=(s+e)/2;
必须一直循环,可能有重复的元素
// if(a[m] == sum){
// return m+1;
// } else
请注意条件已更改为 <=
// if (a[m] < sum) {
if (a[m] <= sum) {
s = m + 1;
}
else {
e = m - 1;
}
}
必须返回s
这里
// return m;
return s;
}
关于algorithm - 如何在排序数组中找到一个元素,使得它之后的所有元素都大于给定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877781/