我从leetcode
找到了一个解决方案public class Solution {
public void merge(int A[], int m, int B[], int n) {
int i = m - 1, j = n - 1, k = m + n - 1;
while(i >= 0 && j >= 0) {
A[k--] = A[i] > B[j] ? A[i--] : B[j--];
}
while(j >= 0) {
A[k--] = B[j--]; //line 8
}
}
我试图理解Java中的A [K-]。对于第8行,这是否意味着
A[k] = B[j];
k--;
j--;
示例更容易。说 k
是5, j
是2。发生的是:
-
A[k]
位于A[5]
-
k
从5减少到4。 - 复制
B[j]
的值,即B[2]
。 -
j
从2降低到1。 - 从
B[2]
复制的值分配到1个确定的位置1,即A[5]
。
除外,只要保证结果相同,允许编译器重新排列订单。
是的,是的,您是正确的,结果也与您得出的结果相同:
A[k] = B[j];
k--;
j--;
A[k--] = 2;
的意思是:
"我在数组的k索引和情感后影响值2,k采用k-1的值"
"
例如:
int k = 4;
int A[] = {0, 0, 0, 0, 0};
// here k=4 and A={0, 0, 0, 0, 0}
A[k--] = 12;
// Now k=3 and A={0, 0, 0, 0, 12}