合并两个排序数组
Merging Two Sorted Arrays
所以问题是:
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 作为一个有序数组。
注:
nums1和nums2中初始化的元素个数分别为m和n
您可以假设 nums1 有足够的 space(大于或等于 m + n 的大小)来容纳 nums2 中的其他元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
它给了我一个 indexOutOfBoundException 但我很难看出我的逻辑的哪一部分是不正确的。
public void merge(int[] nums1, int m, int[] nums2, int n) {
int aIndex = m--; // num1 pointer
int bIndex = n--; // nums2 pointer;
int mergeIndex = nums1.length - 1; //mergePointer
while(mergeIndex >= 0) {
if(aIndex < 0) {
nums1[mergeIndex] = nums2[bIndex];
bIndex--;
}
else if (bIndex < 0) {
nums1[mergeIndex] = nums1[aIndex];
aIndex--;
}
else {
if(nums1[aIndex] > nums2[bIndex]) {
nums1[mergeIndex] = nums1[aIndex];
aIndex--;
}
else {
nums1[mergeIndex] = nums2[bIndex];
bIndex--;
}
}
mergeIndex --;
}
}
提前致谢!
所以问题出在您初始化 aIndex
和 bIndex
的方式上。您分配它们 m
和 n
然后减少它们(post 递减)。这就是为什么它给你 ArrayOutOfBoundException
试试这个:
int aIndex = --m; // num1 pointer
int bIndex = --n; // nums2 pointer;
所以问题是: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 作为一个有序数组。
注:
nums1和nums2中初始化的元素个数分别为m和n
您可以假设 nums1 有足够的 space(大于或等于 m + n 的大小)来容纳 nums2 中的其他元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
它给了我一个 indexOutOfBoundException 但我很难看出我的逻辑的哪一部分是不正确的。
public void merge(int[] nums1, int m, int[] nums2, int n) {
int aIndex = m--; // num1 pointer
int bIndex = n--; // nums2 pointer;
int mergeIndex = nums1.length - 1; //mergePointer
while(mergeIndex >= 0) {
if(aIndex < 0) {
nums1[mergeIndex] = nums2[bIndex];
bIndex--;
}
else if (bIndex < 0) {
nums1[mergeIndex] = nums1[aIndex];
aIndex--;
}
else {
if(nums1[aIndex] > nums2[bIndex]) {
nums1[mergeIndex] = nums1[aIndex];
aIndex--;
}
else {
nums1[mergeIndex] = nums2[bIndex];
bIndex--;
}
}
mergeIndex --;
}
}
提前致谢!
所以问题出在您初始化 aIndex
和 bIndex
的方式上。您分配它们 m
和 n
然后减少它们(post 递减)。这就是为什么它给你 ArrayOutOfBoundException
试试这个:
int aIndex = --m; // num1 pointer
int bIndex = --n; // nums2 pointer;