01_合并两个有序数组

2019-11-01  本文已影响0人  butters001
# 气死面试官的答案
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: None Do not return anything, modify nums1 in-place instead.
        """
        nums1[m:m + n] = nums2
        # for i in range(n):
        #     nums1[m] = nums2[i]
        #     m += 1
        nums1.sort()


# leetcode 最优解
class Solution2(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: None Do not return anything, modify nums1 in-place instead.
        """
        while m > 0 and n > 0:
            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 > 0:
            nums1[:n] = nums2[:n]


nums1 = [1, 2, 3, 0, 0, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
s = Solution2()
s.merge(nums1, m, nums2, n)
print(nums1)
# [1, 2, 2, 3, 5, 6, 0, 0]

上一篇 下一篇

猜你喜欢

热点阅读