目 录
一、合并排序数组
1.1 题干
给定两个排序的整数数组nums1和nums2,将nums2合并为nums1作为一个排序的数组。
注意:
- 在nums1和nums2中初始化的元素数分别为m和n。
- 您可以假设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