leetcode35 搜索插入位置




leetcode35 搜索插入位置

题目链接

题目描述

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5

输出: 2

示例 2:

输入: [1,3,5,6], 2

输出: 1

示例 3:

输入: [1,3,5,6], 7

输出: 4

示例 4:

输入: [1,3,5,6], 0

输出: 0

思路:

排完序的数组找一个数,很明显的二分。每次和中间的值比较如果比目标大就看左半边否则右半边。

但看完评论发现c++STL里的lower_bound();一行就搞定了。。。果然还是要好好学习

ac代码:

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

使用stl:

class Solution 
{
public:
    int searchInsert(vector<int>& nums, int target)
    {
        return lower_bound(nums.begin(),nums.end(),target) - nums.begin();
    }
};


登录后评论

共有0条评论