题解 | #牛牛的数组匹配#
牛牛的数组匹配
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")