关闭

[LeetCode]problem 35. Search Insert Position

标签: LeetCode
157人阅读 评论(0) 收藏 举报
分类:

problem 35. Search Insert Position

link

TAG

二分查找

插入

方法

能够比较快的明确思路——就是二分查找的应用。

然而写起来还是很费劲,之前那道找最长递增序列的长度其实就需要用到这道题的算法来实现快速查找插入位置(完全一样好吗!当时就写出来了啊…但是现在又忘了…)。 直接看了DISCUSS的代码.

记住了两点关键:

  1. 循环条件是low<=high, 其中high初始为size -1,即没有与STL中的范围下标规范一致。(可以一致的,如果要一致,那么循环条件就是小于)

  2. 循环跳出条件,必然满足low == high+1,所以返回low或者high+1都是没有问题的。但是mid的值是不确定的,在退出之前,mid值肯定是等于low的,但是退出后mid与low的关系就不一定了…(有可能是mid小1,有可能是相等)

代码

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

后记

之前一直写在Github上,最近决心找工作,得做做表面工作啊… 所以要同步起来了…orz,感觉好没意思…然而,虚荣心让我还是要这么做

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    有什么值得去写?

    一位师兄以前说,现在互联网上的各种教程都是相互拷贝,一堆垃圾,根本没有写的必要。我想想觉得也很有道理。

    如果你只是记录下一个软件的安装过程,那还不如去看官方文档。但是如果你加上遇到的坑以及解决办法,那么这或许是一篇有意义的文章。如果你只是记录下一个函数简单用法,那怎么不去看官方文档(确实我现在都是去官方文档看)?但是如果你加上一些这个函数常用场景,用起来的漂亮代码,内部实现原理,那么这篇文章也是有意义的。

    最近因为找工作,在刷LeetCode。以前我还从网上找题解,后来我直接在DISCUSS上看HOT就好了。那我记录有何理由?我可以记录思考过程,可以考虑代码的优化,可以展示清晰易读标准C++11的代码

    个人资料
    • 访问:65360次
    • 积分:1686
    • 等级:
    • 排名:千里之外
    • 原创:104篇
    • 转载:13篇
    • 译文:0篇
    • 评论:13条