88. Merge Sorted Array python
来源:互联网 发布:中国国家顶级域名 编辑:程序博客网 时间:2024/06/16 08:15
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
python的一个解法是:
class Solution(object): def merge(self, nums1, m, nums2, n): nums1[m:] = nums2[:n] nums1.sort()
我就想问问这和下面这个解法意思不是差不多吗?为什么下面这张解法不行?下面这个我在IDE里面运行答案是对的,但是提交答案错了。
class Solution(object): def merge(self, nums1, m, nums2, n): for x in nums2: nums1.append(x) nums1.sort()
或者还有一个:
nums1 = nums1+nums2
簡單的測試
def merge1(nums1, m, nums2, n): nums1[m:] = nums2[:n] nums1.sort()def merge2(nums1, m, nums2, n): for x in nums2: nums1.append(x) nums1.sort()def merge3(nums1, m, nums2, n): nums1 = nums1 + nums2m = 3n = 2for merge in [merge1, merge2, merge3]: nums1 = [1, 5, 8, 0, 0] nums2 = [2, 3, 0] merge(nums1, m, nums2, n) print('{:>8}: {}'.format(merge.__name__, nums1))
結果:
merge1: [1, 2, 3, 5, 8] merge2: [0, 0, 0, 1, 2, 3, 5, 8] merge3: [1, 5, 8, 0, 0]
說明
本題對於 Python 來說不是那麼妥當( leetcode 很多資料結構的題目都有這種問題), 原題講的是 array, 但我們這邊操作的是 list, 雖然 Python 的 list 其實比較像是 array 但是還是有些許不同。
由題目可知, nums1
的長度由 m+n
起跳, 這邊可能是弄不清楚的原因, m
表示了元素的數量, m+n
以上說明的是 nums1
的長度(空間), 所以在我的例子中, 我使用 0 代表一個無意義的數字但強調有該空間的存在。
merge1
所以第一種作法, nums1[m:] = nums2[:n]
是將 nums2
的前 n 個元素(有效元素) 填入 nums1
的後半部空間(從第 m+1
個位置開始填), 最後再進行排序, 所以最後的答案會是我們要的。
merge2
第二種作法乍看與第一種作法相同, 但在本題可能會使用的輸入資料而言, 其實並不相同, 他並不會使用 nums1
後面剩餘的空間, 反而對 nums2
中的每個元素都新增了一個空間(使用了 append
), 這導致了 nums1
的長度(空間) 改變。
merge3
這種作法的問題跟第二種做法一樣, 但是更嚴重的是, nums1 + nums2
會產生一個新的對象, 因為這個改變並非 in-place 的, 雖然最後依然賦值給 nums1
, 但這個變量已經不是參考到原本的 nums1
了, 原本的 nums1
完全沒有受到影響。
希望有正確理解題目並解決你的疑惑!
URL:https://segmentfault.com/q/1010000006854432
- 88. Merge Sorted Array(python)
- 88. Merge Sorted Array python
- 88. Merge Sorted Array [easy] (Python)
- [leetcode:python]88.Merge Sorted Array
- 88. Merge Sorted Array
- 88.Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- 88. Merge Sorted Array
- WINVNC源码分析(五)——vnchooks
- PS作品-毕业车票
- SpringMVC
- 优化MySchool 第七章课后
- 40. Combination Sum II(unsolved)
- 88. Merge Sorted Array python
- JS里for循环遍历对象的顺序---是按成员添加到对象中的先后顺序遍历的
- 机器学习核函数理解
- 第一周:[LeetCode]1. Two Sum
- SpringMVC multipart文件上传详细教程之一:项目概述及基本配置
- webapi接收上传的文件和相关参数
- 数据库的查询排序、分组查询及筛选
- 洋洋洒洒一大片的aio实验代码
- 关于Android事件分发机制一些要注意的问题