Re: [讨论] leetcode 88. Merge Sorted Array

楼主: sandy946727 (昭昭)   2020-02-27 00:47:46
感谢推文的乡民,结论是不需要line a & b就可以得到答案,
我这边也附上一个简单得例子,
以及详细过程供未来有需要的人参考。
====代码====
nums1 = [1,2,3,0,0,0]
nums2 = [1,4,5] #这里我故意让index 0的数字小于nums1[2]
m=3
n=3
while m > 0 and n > 0:
if nums2[n-1] > nums1[m-1] :
nums1[m+n-1] = nums2[n-1]
n -= 1
print(nums1,"top,m,n:",m,n)
else:
nums1[m+n-1] = nums1[m-1]
m -=1
print(nums1,"bot,m,n:",m,n)
====结果====
[1, 2, 3, 0, 0, 5] top,m,n: 3 2
[1, 2, 3, 0, 4, 5] top,m,n: 3 1
[1, 2, 3, 3, 4, 5] bot,m,n: 2 1
^ ^ #这里是把左边的3向右推一格并取代0
[1, 2, 2, 3, 4, 5] bot,m,n: 1 1
^ ^ #这里是把左边的2向右边推一格并取代3
[1, 1, 2, 3, 4, 5] bot,m,n: 0 1
^ #最终挪出一个空间让nums2[0]填进去
※ 引述《sandy946727 (昭昭)》之铭言:
: 感谢版上先前不吝啬的给予协助,
: 目前卡在一个成功解出来的leetcode题目中某一行解法,网址如下:
: 我也会把题目直接贴上来给大家参考,我所使用的版本是python3
: https://leetcode.com/problems/merge-sorted-array/
: =====题目=====
: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as
: one sorted array.
: Note:
: The number of elements initialized in nums1 and nums2 are m and n
: respectively.
: You may assume that nums1 has enough space (size that is greater or equal to
: m + n) to hold additional elements from nums2.
: Example:
: Input:
: nums1 = [1,2,3,0,0,0], m = 3
: nums2 = [2,5,6], n = 3
: Output: [1,2,2,3,5,6]
: ====我的解法====
: 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.
: """
: while m > 0 and n > 0:
: if nums2[n-1] > nums1[m-1] :
: nums1[m+n-1] = nums2[n-1]
: n -= 1
: else:
: nums1[m+n-1] = nums1[m-1]
: nums1[m-1] = nums2[n-1] #line a
: #nums1[m-1] = nums1[m+n-1] #line b
: m -=1
: if m==0 and n>0:
: nums1[:n] = nums2[:n]
: ====我的疑问(1/2)====
: 在hashtag那边有注解line a与b,自己使用了line a来得到答案,但网络资源提供
: 了另一种解法是使用line b来取代line a,这点就不大明白是如何运作的。
: 因此我在colab做了一个循环来检视line b的行为,如下,
: ====Colab====
: a = [1,2,3,0,0,0]
: n=5
: b=0
: while n > 0:
: a[n] = a[b]
: a[b] = a[n]
: n -=1
: b +=1
: print(a,n,b)
: ====Results====
: [1, 2, 3, 0, 0, 1] 4 1
: [1, 2, 3, 0, 2, 1] 3 2
: [1, 2, 3, 3, 2, 1] 2 3
: [1, 2, 3, 3, 2, 1] 1 4
: [1, 2, 3, 3, 2, 1] 0 5
: ====我的疑问(2/2)====
: 如果line b是对的,在colab里面,我预期得到的结果应该会是
: [0, 0, 0, 3, 2, 1] ,但显然的python3并不是这样算的,在while循环里面,
: list中被复写前数值并不会在下一行被呼叫出来,而是直接地被覆蓋。
: 如果是这样,那为什么使用line b可以解决这题。
: 谢谢你们。

Links booklink

Contact Us: admin [ a t ] ucptt.com