Leetcode 合并有序数组 Merge 2 arrays in 1 array
2016-09-26 12:11
351 查看
《进军硅谷》原题:合并有序数组
给定两个有序数组A和B, 合并B到A, 结果保持有序。假设A有足够空间容纳B。初始时,A、B元素各有m和n个;
Leetcode: https://leetcode.com/problems/merge-sorted-array/
分析:
数组插入新元素没有链表那么方便,因为插入一个新元素会导致插入后的所有元素的移动,为了避免移动,通常从后向前插入,即反向插入;
思路:
1 找到原有数组A和B的最后一个元素;
2 逐个把较大的值放在A数组的m+n-1位置向前。
3 一定要先画图,再写代码;注意边界条件!
给定两个有序数组A和B, 合并B到A, 结果保持有序。假设A有足够空间容纳B。初始时,A、B元素各有m和n个;
Leetcode: https://leetcode.com/problems/merge-sorted-array/
分析:
数组插入新元素没有链表那么方便,因为插入一个新元素会导致插入后的所有元素的移动,为了避免移动,通常从后向前插入,即反向插入;
思路:
1 找到原有数组A和B的最后一个元素;
2 逐个把较大的值放在A数组的m+n-1位置向前。
3 一定要先画图,再写代码;注意边界条件!
public void Merge(int[] nums1, int m, int[] nums2, int n) { //边界条件 if (n == 0) return; if (m == 0) //返回所有的nums2到nums1中 while (n > 0) { nums1[n - 1] = nums2[n - 1]; n--; } int i = m - 1; int j = n - 1; int k = m + n - 1; while (i >= 0 || j >= 0) { if (i < 0 && j >= 0) { nums1[k] = nums2[j]; j--; } else if (i >= 0 && j < 0) { //do nothing i--; } else { if (nums1[i] >= nums2[j]) { nums1[k] = nums1[i]; i--; } else if (nums1[i] < nums2[j]) { nums1[k] = nums2[j]; j--; } } k--; } }
相关文章推荐
- [LeetCode-88] Merge Sorted Array(合并有序数组)
- 【leetcode】Merge Sorted Array(合并两个有序数组到其中一个数组中)
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- leetcode88---Merge Sorted Array(合并有序数组)
- LeetCode Merge Sorted Array(合并有序数组)
- Leetcode 88 Merge Sorted Array 合并两个有序数组
- leetcode:Merge Sorted Array(合并两个有序数组到其中一个数组中)【面试算法题】
- [LeetCode] Merge Sorted Array 合并两个有序数组
- leetcode Merge Sorted Array 合并有序数组
- 【LeetCode】- Merge Sorted Array (合并有序数组).
- [LeetCode]Merge Sorted Array(合并两个有序的数组)
- merge-sorted-array——合并两个有序数组
- LeetCode—Merge Sorted Array两个有序数组排序
- 88. Merge Sorted Array (合并有序数组)
- Merge Sorted Array -- 合并两个有序数组
- leetcode:Merge Sorted Array (合并排好序的数组)
- Merge Sorted Array 合并两个有序数组 @LeetCode
- leetcode 88. Merge Sorted Array合并有序数组
- 高效合并两个有序数组(Merge Sorted Array)
- 【LeetCode-面试算法经典-Java实现】【088-Merge Sorted Array(合并排序数组)】