algorithm - 如何在排序数组中找到一个元素,使得它之后的所有元素都大于给定值?

标签 algorithm search binary-search

我尝试通过修改二分查找算法来实现。

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/

相关文章:

c++ - 链表反向而不使用循环?

python - Python中的费马大定理算法

search - 在 VsVim 中启用文本高亮显示

git - 查找 source 从 git 分支的位置

c++ - 在 OpenCV Mat 中高效查找元素

java - Arrays.binarySearch 的行为

c++ - 二进制搜索的问题

algorithm - 不相交集数据结构和二叉树?

search - 二分搜索 - 最坏/平均情况

python - 多子集和计算