LeetCode 35:Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

给定一个已排序数组和目标值,返回目标值在数组中的下表。如果没有在数组中找到,返回目标值在插入排序下应该插入的位置。

这里有一些示例:

[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0


事先说明下,进入medium后许多题目开始和算法相关,而本人的算法属于一般 需要重学 的情况。因此可能两三天做出来一道题也说不定,也有很多情况下会去研究discuss里别人的实现方法。唯一能够保证的就是所有代码均为本人亲手敲出来并AC后再放到这个 基本没人看的 博客里面。


我自己的想法挺简单,就是遍历一遍找到该插入的地方完事。。。

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();
    }
};

AC后我随手点开来看了看,提示我beats了4.2%的人。。。于是我感觉这样不行啊,得想个更好的办法。后来发现给定数组是排好序的,那么如果用二分查找,算法复杂度不就只有O(lnn)了么!然而,问题只有一个:我 不会写 不熟悉二分查找。。。

只好从discuss里面随便找了个代码,二分查找应该还是挺简单的我就不解释了

class Solution 
{
public:
    int searchInsert(vector<int>& nums, int target) 
    {
        int lo = 0, hi = nums.size(), mid;
        // find index whose value first is greater than target
        while(lo < hi)
        {
            mid = (lo + hi) / 2;
            if (nums[mid] > target) hi = mid;
            else lo = mid + 1;
        }
        // find the target?
        if (lo > 0 && nums[lo - 1] == target) --lo;
        return lo;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值