35. 搜索插入位置

35题链接
https://leetcode-cn.com/problems/search-insert-position/
暴力法:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        for(int i = 0;i<nums.size();i++){
            if(nums[i]>=target) return i;
        }
        return nums.size();

    }
};

二分法
要注意选择的是[left,right]的区间还是[left,right)的区间
第一种[left,right] 代码:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int n = nums.size();
        int left = 0;
        int right = n-1;  //定义target在左闭右闭的区间里
        while(left<=right){
            int middle = (left+right)/2;
            if(nums[middle]>target) right = middle-1;
            else if(nums[middle]<target) left = middle+1;
            else{
                nums[middle] == target;
                return middle;
            } 

        }
        return right+1;

    }
};

第二种[left,right)区间
代码:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
       int n = nums.size();
       int left = 0;
       int right = n;  //定义为左闭右开的区间
       while(left < right){  //这里不能写等于
            int middle = (left+right)>>1;
            if(nums[middle] > target){
                right = middle;
            }else if(nums[middle]<target){
                
                left = middle+1;
            }
            else{
                return middle;
            }
       }
       return right;
    }
};
posted @ 2020-11-15 14:41  secx  阅读(29)  评论(0)    收藏  举报