1. 程式人生 > >Facebook面試題專題1 - leetcode88. Merge Sorted Array★/278. First Bad Version - Easy

Facebook面試題專題1 - leetcode88. Merge Sorted Array★/278. First Bad Version - Easy

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