88 合併兩個有序陣列

2022-09-14 19:36:14 字數 3350 閱讀 4442

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。

初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。你可以假設 nums1 的空間大小等於 m + n,

這樣它就有足夠的空間儲存來自 nums2 的元素。

方法一:直接合併後排序

var merge = function

(nums1, m, nums2, n) ;

python3

classsolution:

def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) ->none:

"""do not return anything, modify nums1 in-place instead.

"""nums1[m:] =nums2

nums1.sort()

方法二:雙指標

/*

* * @param nums1

* @param m

* @param nums2

* @param n

* @return do not return anything, modify nums1 in-place instead. */

var merge = function

(nums1, m, nums2, n)

else

if(s2 ==n)

else

if(nums1[s1] >nums2[s2])

else

newarr[s1 + s2 - 1] =cur;

} let i = 0;

for(let num of newarr)

return

nums1;

};

from typing import

list

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.

"""tmp =

p1, p2 =0, 0

while p1or p2if(p1 ==m):

p2 += 1

elif(p2 ==n):

p1 += 1

elif(nums1[p1] p1 += 1

else

: p2 += 1nums1[:] =tmp

so =solution()

nums1 = [1,2,3,0,0,0]

m = 3nums2 = [2,5,6]

n = 3so.merge(nums1, m, nums2, n)

print

(nums1 )

nums1 = [1]

m = 1nums2 =

n =0

so.merge(nums1, m, nums2, n)

print(nums1 )

方法三:逆向雙指標

/*

* * @param nums1

* @param m

* @param nums2

* @param n

* @return do not return anything, modify nums1 in-place instead. */

var merge = function

(nums1, m, nums2, n)

while(n2>=0)

return

nums1;

}let nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3console.log(nums1, nums2,m,n ,merge(nums1,m,nums2,n))

nums1 = [1], m = 1, nums2 = , n = 0console.log(nums1, nums2,m,n ,merge(nums1,m,nums2,n))

from typing import

list

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.

"""p1, p2 = m-1, n-1tail = 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 -= 1tail -= 1so =solution()

nums1 = [1,2,3,0,0,0]

m = 3nums2 = [2,5,6]

n = 3so.merge(nums1, m, nums2, n)

print

(nums1 )

nums1 = [1]

m = 1nums2 =

n =0

so.merge(nums1, m, nums2, n)

print(nums1 )

示例 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

88 合併兩個有序陣列

略。知道是在nums1上變動。如果從nums1的頭部開始放,就會出現nums1緊接著的第乙個元素還沒有nums2從頭數第二個元素小的情形,這樣就沒有辦法比較了。而從nums1的最後乙個元素開始放,能夠保證nums1和nums2的最後乙個元素一定比彼此的倒數第二個元素大。所以選擇從nums1的最後乙個...

88 合併兩個有序陣列

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 示例 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3輸出 1,2,2,3,5,6 思路 建乙個新的陣列nums,長度為m n 用乙個fo...

88 合併兩個有序陣列

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 nums2 中的元素。示例 輸...