35. 搜索插入位置
原解法
理解错了题意,并不需要插入
验证没通过
#include#include #include #include using namespace std; class Solution { public: int searchInsert(vector<int>& nums, int target) { int left = 0,right = nums.size()-1; while(left<=right) { int middle=left+(right-left)/2; if(target==nums[middle]) return middle; else if(target>nums[middle]) { if(target 1])//若大于后一个小于前一个就插入并返回插入位置 { nums.insert(nums.begin()+middle+1,target); return middle+1; } else left=middle+1; } else { if(target>nums[middle-1]) { nums.insert(nums.begin()+middle,target); return middle; } else right=middle-1; } } return left; } }; int main() { Solution s; int num[4] = {1,3,5,6}; vector<int> nums(num,num+4); int target = 7; cout<<s.searchInsert(nums,target); return 0; }
标准解法:
删去了插入部分;
class Solution { public: int searchInsert(vector<int>& nums, int target) { int left = 0,right = nums.size()-1; while(left<=right) { int middle=left+(right-left)/2; if(target==nums[middle]) return middle; else if(target>nums[middle]) { left=middle+1; } else { right=middle-1; } } return left; } };