leetcode 排序和搜索

目  录

 

一、合并排序数组

1.1 题干

1.2 思路

1.3 代码实现

二. 一个坏的版本

 2.1 题干

2.2 思路

2.3 代码实现


一、合并排序数组

1.1 题干

    给定两个排序的整数数组nums1nums2,将nums2合并为nums1作为一个排序的数组。

注意:

  • nums1nums2中初始化的元素分别为mn
  • 您可以假设nums1有足够的空间(大小大于或等于m + n)来保存nums2中的其他元素。

例:

输入:
nums1 = [1,2,3,0,0,0],m = 3
nums2 = [2,5,6],n = 3

产量:  [1,2,2,3,5,6]

1.2 思路

对nums2进行遍历,遍历到nums2[i]时,判断nums2[i]和nums1中的每一个数比较,若nums2[i]<nums1[j],则将nums2[i]插入到nums1的j位置,并保存j的值,再遍历到nums2[i+1]时,nums1直接从j+1位置开始即可。

1.3 代码实现

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        count = 0
        for i in range(len(nums2)):
            while(nums1[count]<=nums2[i] and count<=m+i-1):
                count = count + 1
            nums1.insert(count,nums2[i])
            count = count + 1 
            del nums1[-1]

二.一个坏的版本

 2.1 题干

      您是产品经理,目前领导团队开发新产品。不幸的是,您产品的最新版本未通过质量检查。由于每个版本都是基于以前的版本开发的,因此糟糕版本之后的所有版本也都很糟糕。假设您有n版本,[1, 2, ..., n]并且您想找出第一个坏版本,这会导致以下所有版本都不好。您将获得一个API bool isBadVersion(version),它将返回是否version为坏。实现一个函数来查找第一个坏版本。您应该最小化对API的调用次数。

给定n = 5,版本= 4是第一个坏版本。

call isBadVersion(3) -> false
call isBadVersion(5) -> true
call isBadVersion(4) -> true
Then 4 is the first bad version. 

2.2 思路

简单的二分查找,注意数据中有数据l+r用int是溢出的。

2.3 代码实现

class Solution:
    def firstBadVersion(self, n):
        left=0;right=n
        while(True):
            mid=(left+right)//2
            if isBadVersion(mid)==False and isBadVersion(mid+1)==True:
                return mid+1
            elif isBadVersion(mid)==False and isBadVersion(mid+1)==False:
                left=mid
            elif isBadVersion(mid)==True and isBadVersion(mid+1)==True:
                right=mid
 

猜你喜欢

转载自blog.csdn.net/yanyiting666/article/details/88991361