二分查找中的坑,你淌过没有

不想说话,直接分类写代码吧。

// 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1
int
BinarySearch(vector<int> A,int target) { // 输入条件判断 int n = A.size(); if(n == 0){ return -1; } //[st, ed] 闭区间 int st = 0, ed = n-1; int ans= 0; while(st <= ed){ int mid = st + (ed-st)/2; if(A[mid] < target){ ans = mid; st = mid + 1; } else{ ed = mid -1; } }
ans
++; if(A[ans] != target){ return -1; } else{ return ans; } }
//给定一个有序(非降序)数组A,可含有重复元素,求最大的i使得A[i]等于target,不存在则返回-1
int
BinarySearch(vector<int> A,int target) { // 输入条件判断 int n = A.size(); if(n == 0){ return -1; } //[st, ed] 闭区间 int st = 0, ed = n-1; int ans= 0; while(st <= ed) { int mid = st + (ed-st)/2; if(A[mid] <= target){ ans = st; st = mid + 1; } else{ ed = mid - 1; } } if(A[ans] != target){ return -1; } else{ return ans; } }

猜你喜欢

转载自www.cnblogs.com/randyniu/p/9226367.html