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(target1])//若大于后一个小于前一个就插入并返回插入位置 
            {
            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;
 }
    
};