天天看點

LeetCode-資料結構-數組-第2天

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。