Merge Sorted Array 归并2个数组
来源:互联网 发布:js音乐播放器进度条 编辑:程序博客网 时间:2024/06/11 14:07
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 andnums2 are m and n respectively.
----------------------------------------------------------------------------------------------------------------------------------------
我们需要明白,nums1中是有足够的空间,归并后的结果的。
在这里我讲介绍2种解法,一种是我最初想到过的空间复杂度为O ( m ) 的解法。另一种是比较好的inplace的解法。
两者的时间复杂度都是O(m + n )
第一种:
再开辟一个数组空间num1Copy,放nums1的前[0 ... m ] 的值,
然后对num1Copy 和 nums2进行归并,将结果放到nums1中去。
运行时间:
代码:
public void merge(int[] nums1, int m, int[] nums2, int n) { int[] nums1Copy = new int[m]; for (int i = 0; i < m; i++) { nums1Copy[i] = nums1[i]; } int i = 0, j = 0; int count = 0; while (i < m && j < n) { if (nums1Copy[i] < nums2[j]) { nums1[count++] = nums1Copy[i++]; } else { nums1[count++] = nums2[j++]; } } if (i < m) { for (; i < m; i++) { nums1[count++] = nums1Copy[i]; } } else if (j < n) { for (; j < n; j++) { nums1[count++] = nums2[j]; } } }
另一种inplace的方法。
非常巧妙,从后往前,归并值大的的。(防止未排序的数组值被更新)
运行时间:
代码:
public void merge2(int[] nums1, int m, int[] nums2, int n) { int i = m - 1, j = n - 1, k = m + n - 1; while (i >= 0 && j >= 0) { nums1[k--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--]; } while (j >= 0) { nums1[k--] = nums2[j--]; } }
参考资料:
https://leetcode.com/discuss/31675/share-my-accepted-java-solution
- Merge Sorted Array 归并2个数组
- 【数组&归并】Merge Sorted Array
- 原地归并数组 Merge Sorted Array
- [LeetCode] Merge Sorted Array 归并排序数组
- (LeetCode)Merge Sorted Array --- 归并数组
- Merge Sorted Array:归并有序数组
- Merge Sorted Array 归并已排序的数组
- LeetCode | Merge Sorted Array(归并有序数组)
- 数组 Merge Sorted Array
- ※ Leetcode - Array - 88. Merge Sorted Array(快速归并两个有序数组)
- LeetCode-88-Merge Sorted Array(归并)-Easy
- 【LeetCode】Merge Sorted Array ---合并数组
- Merge Sorted Array 合并两个有序数组
- Merge Sorted Array -- 合并两个有序数组
- Merge Sorted Array 合并排序的数组
- LintCode Merge Sorted Array 合并排序数组
- (数组)leetcode 88:Merge Sorted Array
- Merge Sorted Array合并两个有序数组
- Android中的task作用和Activity启动模式以及各种启动Flag的含义
- 数据库视频总结(一)
- ContentProvider的使用
- jtable自适应列宽度
- 区块链基础内容总结
- Merge Sorted Array 归并2个数组
- AMH 5.X下安装 Flarum
- spring常用的工具类
- find ./ -name "*.cgi" |xargs -i cp "{}" ./cgi-bin/
- ZigZag Conversion
- StopWatch 记录执行时间
- iOS深入学习(Block全面分析)
- 设计模式--建造者模式
- mysql优化