题解 | #牛牛的数组匹配#

牛牛的数组匹配

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")

全部评论

相关推荐

不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
06-12 10:50
门头沟学院 Java
你的不定积分没加C:我怎么在学院群看到了同样的话
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务