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.
输入:数组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 88.Merge Sorted Array (合并排序数组) 解题思路和方法
- 【Mysql之自我练习<三>】select查询复杂排序(注:私用的,为了不遗失)
- LeetCode --两个排序数组合并问题
- Leetcode练习<二十一>求解整数的平方根
- java 之Sting类型的List集合的汉字排序和String类型数组的汉字排序及List<Bean>排序
- LeetCode Merge Sorted Array 合并已排序的数组
- 黑马程序员 Java基础<一> 数组及排序
- 数组排序方法的性能比较(2):Array.Sort<T>实现分析
- 2. 对数组排序,使得a1<=a2>=a3<=a4>=... 也是很简单的O(n),注意写的时候不用swap元素。。。
- <排序>合并排序...
- [编程练习][Longest Substring Without Repeating Characters]<LeetCode-3>
- LeetCode练习 两个排序数组的中位数
- [编程练习]ZigZag Conversion <LeetCode-6>
- leetcode 347. Top K Frequent Elements 将Hashmap统计次数的Entry,放到List<Entry>里面,对list排序后出现结果
- C++ 中对vector<T*> 数组的查找和排序
- 实验报告<幻方,数组的排序和向数组中插入某个数>
- LeetCode练习<一> 判断大写字母的位置
- Leetcode练习<十一> 整数翻转
- 艾伟_转载:数组排序方法的性能比较(中):Array.Sort<T> 实现分析