1. 兩數之和
題目已刷,連結:LeetCode-題庫-刷題(1-3)
88. 合并兩個有序數組
給你兩個有序整數數組 nums1 和 nums2,請你将 nums2 合并到 nums1 中,使 nums1 成為一個有序數組。
初始化 nums1 和 nums2 的元素數量分别為 m 和 n 。你可以假設 nums1 的空間大小等于 m + n,這樣它就有足夠的空間儲存來自 nums2 的元素。
具體題目連結
Python
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
tail = m + n - 1
m-=1
n-=1
while n >= 0:
if m>=0 and nums1[m] > nums2[n]:
nums1[tail],nums1[m]= nums1[m],nums1[tail]
m -= 1
else:
nums1[tail] = nums2[n]
n -= 1
tail -= 1
複制
思路:逆向雙指針,逆序尋找兩個數組最大的,nums1和nums2數誰大,則填入nums1後面的空缺。如果是nums1大,則進行tail指針與m指針數進行互換(防止出現複制值現象),如果nums2大則直接指派給tail 位置。依次類推進行,
m>=0
表示
nums[1]
有序序列未排完,若排完則就讓nums2繼續排列。
GO
func merge(nums1 []int, m int, nums2 []int, n int) {
tail:=m+n-1
for m,n=m-1,n-1;n>=0;tail--{
if m>=0 && nums1[m]>nums2[n]{
nums1[m],nums1[tail]=nums1[tail],nums1[m]
m--
}else{
nums1[tail]=nums2[n]
n--
}
}
}
複制
思路:可見python。