LeetCode探索之旅(11)

今天继续刷LeetCode,第35题,给定一个数,找到它在有序表中的位置,如果不存在,返回插入位置,使得仍然有序。

分析:
这个题目首先是查找,查找成功,则返回该位置下标,查找失败,就插入,并返回插入位置。可以采用直接遍历的方式,这样时间开销应该会大一点。既然是有序表,那么就可以采用二分查找的方式,加快查找速度,一但查找成功就返回下标,如果不成功就返回插入位置,这样节省很多时间。

问题:
1、二分查找的代码要熟练;
2、注意下标的表示与输出,可以有改进的地方;

附上代码:

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

另外,简化的代码:

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

猜你喜欢

转载自blog.csdn.net/JerryZengZ/article/details/87777478
今日推荐