LeetCode20—— 合并两个有序数组
LeetCode20—— 合并两个有序数组
前言:
题目内容:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。 示例 1: 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6]
示例 2: 输入:nums1 = [1], m = 1, nums2 = [], n = 0 输出:[1]
提示:
nums1.length == m + n nums2.length == n 0 <= m, n <= 200 1 <= m + n <= 200 -109 <= nums1[i], nums2[i] <= 109
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: None Do not return anything, modify nums1 in-place instead. """ i = m - 1 # 指针i用于存放nums1从右到左的指针 j = n - 1 # 指针j用于存放nums2从右到左的指针 pos = m + n - 1 # 指针pos用于存储比较i和j指针指向树枝的较大值 while i >= 0 and j >= 0: # 如果nums1的最右边参数小于等于nums2最右边参数,将nums2最右边的值存储到pos所指向的位置,j指针和pos指针都向左移一位 if nums1[i] <= nums2[j]: nums1[pos] = nums2[j] pos -= 1 j -= 1 # 如果nums1的最右边参数大于nums2最右边参数,将nums1最右边的值存储到pos所指向的位置,i指针和pos指针都向左移一位 else: nums1[pos] = nums1[i] pos -= 1 i -= 1 # 如果最后nums1的i指针没有遍历到0,因为nums1是有序的。并且此时nums2的参数都已挪到了nums1,所以不用处理 # 如果最后nums2的j指针没有遍历到0,则需要将nums2剩余的参数按顺序填充到nums1开头 if j >= 0: for z in range(0, len(nums2[:j + 1])): nums1[z] = nums2[z] # 返回nums1则为排序后的结果 return nums1 if __name__ == __main__: nums1 = [1,2,3,0,0,0] m = 3 nums2 = [2,5,6] n = 3 aa = Solution() print(aa.merge(nums1, m, nums2, n))
方法二:
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:] = nums2 nums1.sort() return nums1 if __name__ == __main__: nums1 = [1,2,3,0,0,0] m = 3 nums2 = [2,5,6] n = 3 aa = Solution() print(aa.merge(nums1, m, nums2, n))
上一篇:
IDEA上Java项目控制台中文乱码