归并过程一般这么写
while (i <= u1 && j <= u2) {
if (nums[i] < nums[j]) {
merged[k++] = nums[i++];
} else {
merged[k++] = nums[j++];
}
}
while (i <= u1) {
merged[k++] = nums[i++];
}
while (j <= u2) {
merged[k++] = nums[j++];
}
有时见这么写
while (i <= u1 || j <= u2) {
if (j > u2 || (i <= u1 && nums[i] < nums[j]) {
merged[k++] = nums[i++];
} else {
merged[k++] = nums[j++];
}
}
可在两有序数组的公共元素间跳跃前进,求最大路径和
int maxSum(vector<int>& A, vector<int>& B) {
// 数组有些公共元素,公共元素间的路径两数组各有一条,选大的那条
const int MOD = 1e9 + 7;
const int M = A.size(), N = B.size();
int i = 0, j = 0;
long sumA = 0, sumB = 0;
while (i < M || j < N) {
if (j == N || (i < M && A[i] < B[j])) {
sumA += A[i++];
} else if (i == M || (j < N && A[i] > B[j])) {
sumB += B[j++];
} else {
sumA = sumB = max(sumA, sumB) + A[i];
i++, j++;
}
}
return max(sumA, sumB) % MOD;
}