区间[L,R]代表还需要查找的区间。
如果nums[mid] == target,直接返回答案
如果nums[mid] < target,说明mid位置及其前面的都不可能是答案了,让L = mid+1
如果nums[mid] > target,说明mid位置及其后面的位置都不可能是答案了,所以让R=mid-1
c++
class Solution { public: int search(vector<int>& nums, int target) { int L,R; L = 0; R = nums.size()-1; int ans = -1; while(L <= R) { int mid = (L+R)/2; if(nums[mid] == target) { return mid; } else if(nums[mid] > target) { R = mid-1; } else { L = mid+1; } } return -1; } };
java
import java.util.*; public class Solution { public int search (int[] nums, int target) { int L,R; L = 0; R = nums.length-1; int ans = -1; while(L <= R) { int mid = (L+R)/2; if(nums[mid] == target) { return mid; } else if(nums[mid] > target) { R = mid-1; } else { L = mid+1; } } return -1; } }
python
class Solution: def search(self , nums , target ): L = 0 R = len(nums)-1 ans = -1 while L <= R: mid = (L+R)//2; if nums[mid] == target: return mid elif nums[mid] > target: R = mid-1 else: L = mid+1 return -1