簡體   English   中英

如何在排序后的數組中找到一個元素,使其后面的所有元素都大於給定值?

[英]How to find an element in a sorted array such that all the elements after it are greater than a given value?

我試圖通過修改二進制搜索算法來實現它。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM