对于this problem,我有一个可行的解决方案:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int count = m+n-1;
m--;
n--;
while(m>=0 && n>=0) {
if(nums1[m]>nums2[n])
nums1[count--] = nums1[m--];
else
nums1[count--] = nums2[n--];
}
while (n>=0) {
nums1[count--] = nums2[n--];
}
}
}
但是我想做的是摆脱第二个while循环。
我尝试过这样的事情:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int count = m+n-1;
m--;
n--;
while(m>=0 || n>=0) {
if(m>=0 && n>=0 && nums1[m]>nums2[n])
nums1[count--] = nums1[m--];
else if(n>=0)
nums1[count--] = nums2[n--];
}
}
}
但是我遇到了数组边界异常。
有什么想法吗?
答案 0 :(得分:2)
您确定它是IndexOutOfBoundsException吗?对我来说,问题似乎是,如果n <0和m> = 0,您将得到一个无限循环。
这是一个可行的解决方案,我基本上只是简化了您的工作,并纠正了错误:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int count = m+n-1;
m--;
n--;
while(n>=0) {
if(m>=0 && nums1[m]>nums2[n])
nums1[count--] = nums1[m--];
else
nums1[count--] = nums2[n--];
}
}
}