给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。
初始化 A 和 B 的元素数量分别为 m 和 n。
示例:
输入:
A = [1,2,3,0,0,0], m = 3
B = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
class Solution { public void merge(int[] A, int m, int[] B, int n) { int lenA = m - 1; int lenB = n - 1; int max = m + n - 1; while(lenA >= 0 && lenB >= 0){ if(A[lenA] > B[lenB]){ A[max] = A[lenA]; lenA--; max--; continue; }else { A[max] = B[lenB]; lenB--; max--; } } while(lenB >= 0){ A[max] = B[lenB]; max--; lenB--; } } }
提交之后,用时很短同时也不占用比较多的内存
解题思路:
由于A和B数组都是有序的,那么A数组的最后一个就是A数组中最大的一个,B数组中的最后一个就是B数组中最大的一个。
将A和B数组从最后开始往前比较,比较之后大的值就放在A数组中的最后,依次比较。当原来A数组中的数据重新都放入A数组中之后而B数组中的数据还有剩余的时候,那么就让B数组中的数字依次填入A数组中就可以了。