Facebook面試題專題1 - leetcode88. Merge Sorted Array★/278. First Bad Version - Easy
阿新 • • 發佈:2018-12-19
88. Merge Sorted Array
微軟實習面試題
題目描述
給定兩個有序整數陣列nums1和nums2,合併兩者成一個有序陣列。
nums1和nums2的元素數目分別是m和n。假設nums1有足夠空間(≥m+n)來容納來自於nums2的元素。
例子
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
思想
要求是原地修正。
(法1) - Trick
從後向前比較,較大的元素從nums1尾部開始放。
(法2)
從前向後比較,較小的元素從nums1尾部開始放,然後逆序nums。
解法
```python
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.
"""
while m and n:
if nums1[m-1] > nums2[n-1]:
nums1[m+n-1] = nums1[m-1]
m -= 1
else:
nums1[m+n-1] = nums2[n-1]
n -= 1
if n:
nums1[:n] = nums2[:n]
278. First Bad Version
題目描述
你是PM且現在領導團隊開發一個新產品。不幸的是,最新版的產品有質量問題。因為每個版本都是基於上個版本產品開發的,所以質量差的產品會延續給下一代產品。
假設你有n代產品[1, 2, …, n],想找到第一個壞的版本。
給定一個API名為 isBadVersion(version),返回version是否是壞的。編寫函式找到第一個壞的版本。(最小化呼叫API的次數)
例子
Given n = 5, and version = 4 is the first bad version.
call isBadVersion(3) -> false
call isBadVersion(5) -> true
call isBadVersion(4) -> true
Then 4 is the first bad version.
思想
二分,找到第一個為 isBadVersion(version)返回為true的版本。
解法
# 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
"""
l, r = 1, n
while l <= r:
mid = (l + r) >> 1
if isBadVersion(mid):
if mid == 1 or not isBadVersion(mid-1):
return mid
r = mid - 1
else:
l = mid + 1