leepcode题目解析5

22、缺失数字

给定一个包含 0, 1, 2, ..., nn 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。

示例 1:

输入: [3,0,1]
输出: 2

示例 2:

输入: [9,6,4,2,3,5,7,0,1]
输出: 8
class Solution(object):
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if nums == [0]:
            return 1
        else:
            nums.sort() 
            for i in range(len(nums)):
                if nums[i] != i:  ##因为数组是0-n,所以如果数字中的索引值不等于数字中的元素值,那这个索引值就是缺失的元素值。
                    return i
            return nums[-1]+1  ## 如果for循环内返回的是空值,则最后一个值+1(如果数组缺失的是最后一个值,那么for循环取出来的值就会是空值)
            

23、第一个错误的版本

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。

假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

示例:

给定 n = 5,并且 version = 4 是第一个错误的版本。

调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true

所以,4 是第一个错误的版本。 

解答:使用了二分法解题,二分法排除

# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):

class Solution(object):
    def firstBadVersion(self, n):
        """
        :type n: int
        :rtype: int
        """
        left = 1
        right = n  # type:int
        while left <=right:
            mid = (left + right) //2
            if isBadVersion(mid):
                right = mid -1
            else:
                left = mid +1
        return (left)

24、移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

解答:

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        # j = 0
        # if len(nums) == 1:
        #     return nums
        # else:
        #     for i in range(len(nums)):
        #         if 1nums[i] != 0:
        #             nums[j] = nums[i]
        #             nums[i] = 0
        #             j +=1
        # #     return nums
        # j = 0
        # if len(nums) == 1:
        #     return(nums)
        # elif len(nums) ==2:
        #     if nums[0] == 0:
        #         nums[0],nums[1] =nums[1],nums[0]
        #         return(nums)
        #     else:
        #         return nums
        # if len(nums)>2:
        #     for i in range(len(nums)):
        #         if nums[i] != 0:
        #             nums[j] = nums[i]
        #             nums[i] = 0
        #             j +=1
        #     return(nums)    
        nums.sort(key=bool, reverse=True)
原文地址:https://www.cnblogs.com/raynduan/p/10902389.html