您的位置:首页 > 其它

35. Search Insert Position(第九周)

2017-04-23 19:23 267 查看
方法一:

class Solution

{

public:

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

    }
};

这是一种很简单很笨的实现方法,因为是顺序排列,从前往后依次寻找,如果vector中元素大于等于target,则返回该元素的下标;否则,则说明target大于vector中的所有元素,返回vector中元素的个数即为target插入后的下标。

方法二:

class Solution

{

public:

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

    }

};

使用二分查找,可以使得时间复杂度降低,每次找出中间位置的元素,与目标元素进行比较,如果相等则返回,如果中间元素大于目标元素,则将mid-1作为r的值;如果中间元素小于目标元素,则将mid+1作为l的值;如果目标元素大于vector中的所有元素,则直接返回l的值,此时l的值正好是插入后target的下标,r则是target下标减一。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: