题解 | #牛牛的数组匹配#
牛牛的数组匹配
https://www.nowcoder.com/practice/3d3406f4a7eb4346b025cc592be5b875
#include <iostream>
using namespace std;
int main() {
int n, m, sum = 0, start = 0, end = 0, sumup = 0;
cin >> n >> m;
int a, b[m];
for (int i = 0; i < n; i++) { //计算第一个数列的和
cin >> a;
sum += a;
}
for (int i = 0; i < m; i++) cin >> b[i]; //录入第二个数列
if (m == 1) cout << b[0];
int left = 0, right = 0, sub = sum; //left,慢指针,right,快指针,sub此时第二个数列连续
//元素之和与第一个数列和之差的绝对值
while (right < m) {
sumup += b[right]; //从左往右,依次累加
if (sub > abs(sum - sumup)) { //由于题目要求是连续顺序而且第二个数列中元素均为正数,因此当sumup大于sum时,将right序号的元素删除,可以使sumup接近sum,但是接近的效果需要进行评估
sub = abs(sum - sumup); //当接近效果好时,记录当前的sub,left和right指针的位置。加减元素时,均要进行接近效果的判断。
start = left;
end = right;
}
if (sumup > sum) {
sumup -= b[left];
left++;
}
if (sub > abs(sum - sumup)) {
sub = abs(sum - sumup);
start = left;
end = right;
}
right++;
}
for (int i = start; i <= end; i++) cout << b[i] << ' ';//打印元素
return 0;
}
// 64 位输出请用 printf("%lld")
美团成长空间 2663人发布
