classSolution { public: intsearchInsert(vector<int>& nums, int target){ int low = 0, high = nums.size()-1; while(low<=high){ int mid = (low+high)/2; if(nums[mid] == target) return mid; elseif(nums[mid] > target) high = mid-1; else low = mid+1; } //当小于第一个元素时,low会停在0,hi会是-1; //当在数组区间时,low=hi在期望的位置。 //当大于最后一个元素是,low = nums.size(), hi = nums.size(); return low; } };
二分的初步题。
要十分深刻的了解指针的运行状态才能写出简洁的代码。
比如自己写的最终版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution { public: intsearchInsert(vector<int>& nums, int target){ int lo = 0; int hi = nums.size()-1; int mid; if(target < nums[0]) return0; while(lo <= hi){
mid = (lo + hi)/2; if(nums[mid] == target) return mid; elseif(nums[mid] < target) lo = mid+1; elseif(nums[mid] > target) hi = mid-1; } return nums[hi] > target ? hi : hi+1; } };