题目要求为:
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n
解法一思路:既然nums1为nums2预留了位置,直接将预留的位置赋值为nums2的值然后再排序
for i in range(len(nums2)): nums1[-(i+1)]=nums2[i] nums1.sort()
解法二思路:设置三个指针,一个在nums1未留0的末尾,一个在nums1留0的末尾,一个在nums2的末尾。
因为nums2为升序数组,循环分为这两种情况:
1.i与j比较如果i<j则将j的值赋值给k,k前移一位,j前移一位
2.i与j比较如果i>=j则将i的值赋值给k,然后将i与k都往前移一位。
代码为:
p1, p2 = m - 1, n - 1 tail = m + n - 1 while p1 >= 0 or p2 >= 0: if p1 == -1: nums1[tail] = nums2[p2] p2 -= 1 elif p2 == -1: nums1[tail] = nums1[p1] p1 -= 1 elif nums1[p1] > nums2[p2]: nums1[tail] = nums1[p1] p1 -= 1 else: nums1[tail] = nums2[p2] p2 -= 1 tail -= 1