美文网首页
leetcode之排序和搜索

leetcode之排序和搜索

作者: HugiFish | 来源:发表于2019-06-20 19:30 被阅读0次

    1. 合并两个有序数组

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
    说明:
    初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
    你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

    解题思路:一般像这种数组有插入操作的基本上都会用到尾插法,比较的同时也完成了移动。直接在尾部比较,较大的插入num1的尾部,然后插入位置前移。

    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
            if(0 == n ) return;
            int newIndex = m + n - 1;
            int i1 = m-1;
            int i2 = n-1;
            while( i1 != -1 && i2!=-1){
                if(nums1[i1]>= nums2[i2]){
                    nums1[newIndex] = nums1[i1];
                    --i1;
                    --newIndex;
                }else{
                    nums1[newIndex] = nums2[i2];
                    --i2;
                    --newIndex;
                }
            }
            while(-1 != i2)
            {
                nums1[i2] = nums2[i2];
                --i2;
            }
        }
    

    2. 第一个错误的版本

    你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
    假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
    你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

    • 示例:
      给定 n = 5,并且 version = 4 是第一个错误的版本。
      调用 isBadVersion(3) -> false
      调用 isBadVersion(5) -> true
      调用 isBadVersion(4) -> true
      所以,4 是第一个错误的版本。

    解题思路:题中要求比较次数最少,那么可以采用二分查找的方法进行比较,二分到最后,min一定会停留在第一个错误的版本,并且max一定停留在最后一个正确的版本。
    注意:有一项是值得注意的,如果采用max+min/2计算mid时,一定要使用unsigned int版本的下标,否则会出现溢出的情况。

     int firstBadVersion(int n) {
            int min = 1, max = n, mid = 0;
            while(min <= max){
                mid = min + (max - min) / 2;
                if(isBadVersion(mid)){
                    max = mid - 1;
                } else {
                    min = mid + 1;
                }
            }
            return min;
        }
    

    相关文章

      网友评论

          本文标题:leetcode之排序和搜索

          本文链接:https://www.haomeiwen.com/subject/icojqctx.html