水下功夫做透,水上才能顺风顺水。

顺序递增数组中,找到key首次出现的位置

1. 顺序递增数组中,找到key首次出现的位置

int find(int * arr , int length, int key){
    int low = 0,high = length-1,mid;
    while(low <= high){
        mid = (low + high)/2;
        if (arr[mid] < key){
            low = mid + 1;
        }else if(arr[mid] > key){
            high = mid - 1;
        }else{
            if (mid == 0) return mid;//找到的key是第1个元素,直接返回
            if (mid >= 1 && arr[mid-1] != key) return mid;//当前下标上一位不重复时,直接返回mid,
            else high = mid - 1;//其他继续循环,而不是return
        }
    }
    return -1;
}

 

posted @ 2021-06-13 16:52  北方寒士  阅读(70)  评论(0编辑  收藏  举报