您的位置:首页 > 其它

Leetcode练习<十七> 合并数组并排序

2017-07-25 09:39 459 查看
一、题目要求

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.

输入:数组1 -> num1 数组1长度 -> m

数组2 -> num2 数组2长度 -> n

输出:合并之后的数组,而且排序好的。

二、分析

1、当第一个数组为空的时候,直接在第一个数组的后面添加数组2就可以,而且数组2是排序好的。nums1 = nums1[len(nums1):len(nums1)] = b 或者 a = a.expend(b)

2、当数组2的每一个数都比数组1的值大时,思路同上。

3、当数组2和数组1的值有交叉(数组1既不为空,数组2的值也既有大于数组1的,也有小于数组1的)。这时就略微麻烦一点。我们最终要得结果是二者合并之后,并且排序好。那就可以把这个题理解为占坑。从数组的最后一个值开始,如果数组2的最后一个值(num2[n-1])小于数组1的最后一个值(num1[m-1]),那就把m+n-1这个位置给num1[m-1], 如果num2[n-1]>num1[m-1] ,那就把m+n-1这个位置给num2[n-1].

# 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.
# Subscribe to see which companies asked this question.
class Solution(object):  # 这个方法不对
def merge(self, nums1, m, nums2, n):
nums1[len(nums1):len(nums1)] = nums2
nums1 = list(sorted(nums1))
return nums1
# m和n分别为原始数组的长度
# 以第二个数组开始寻找, 如果m <= 0,说明第一个数组没有数据, 直接在第一个数组后面添加第二个数组就行
# 如果第二个数组的最后一个数字大于第一个数组的最后一个数字, 那么就将第二个数组的最后一个数字放在m+n-1的位置,
# 否则就将第一个数组的最后一个数字放在m+n-1的位置
def merge1(self, nums1, m, nums2, n):
while n > 0:
if m <= 0 or nums2[n-1] >= nums1[m-1]:
nums1[m+n-1] = nums2[n-1]
n -= 1
else:
nums1[m+n-1] = nums1[m-1]
m -= 1
return nums1

if __name__ == '__main__':
nums1 = [0]
m = 0
nums2 = [1]
n = 1
s = Solution()
print(s.merge(nums1, m, nums2, n))

# 同时学到了将两个list合并在一块的方法a =[1, 2, 3] b = [4, 5, 6]合并完是c = [1, 2, 3, 4, 5, 6]
# 第一种方法 c = a.expend(b)
# 第二种方法 a = a[len(a):len(a)] = b
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode