LeetCode 35 搜索插入位置

68 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题目

在这里插入图片描述 在这里插入图片描述

代码

这是第一种思路,简单的循环。时间复杂度是O(n).

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int len=nums.size();
        int last=nums[0];
        for(int i=0;i<len;i++){
            if(nums[i]==target){
                return i;
            }
            //如果该元素等于target的话,就直接返回。
            if((last<target)&&(nums[i]>target)){
                return i;
            }
            //如果target介于数组中两个元素之间的话,就输出后面一个元素的下标。
            last=nums[i];
        }
        if(nums[len-1]<target){
            return len;
        }
        //如果target比数组中最后一个元素还要大的话,就直接输出输出的大小,它比最后一位的下标还要大1。
        return 0;
        //最后一句话是防止,数组的大小为0.
    }
};

参考了答案之后,发现了还有二分法的思想也可以解这种题目。二分法的话显然可以把复杂度减低到O(n log n). 实际的运行结果来看,确实也更快一点。

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int len=nums.size();
        int left=0;
        int right=len-1;
        int mid=(left+right)/2;
        while(left<=right){
            if(nums[mid]<target){
                left =mid+1;
            }
            else{
                right=mid-1;
            }
           
            mid=(left+right)/2;
        }
        return left;
    }
};