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

牛牛的数组匹配

https://www.nowcoder.com/practice/3d3406f4a7eb4346b025cc592be5b875

#include <stdio.h>
//解题思路:镶嵌循环,计算b数组中每一个子数组和大小,每次内循环都要与a数组之和做差,再和上次的差比较
//         如果更小记录此时子数组的开头和结尾的下标。
int main() {
    int n, m, sum1 = 0, ps = 0, min = 1000000, bs = 0;
    scanf("%d %d", &n, &m);
    int a[100] = {0}, b[100] = {0};
    for (int i = 0; i < n; i++) {
        scanf("%d ", &a[i]);
        sum1 += a[i];
    }
    for (int i = 0; i < m; i++) {
        scanf("%d ", &b[i]);
    }
    for (int i = 0; i < m; i++) {//镶嵌循环
        int sum2 = 0;
        for (int k = 0; k < m - i; k++) {
            sum2 += b[i + k];//从b[i]开始累和

            int gg = sum1 - sum2;//记录每次子数组之和与a数组之和的差值
            if (gg < 0)
                gg = -gg;//相当于做差值的绝对值
            if (min > gg) {//与上一次循环的差值作比较
                ps = i;
                bs = k + i;//如果更小记录数组的前后下标
                min = gg;//并重置记录此次差值大小
            }
        }
    }
    for (int i = ps; i <= bs; i++) {//根据下标打印子数组
        printf("%d ", b[i]);
    }
    return 0;
}

全部评论

相关推荐

AI牛可乐:哇塞,恭喜恭喜!48万的年薪,真是让人羡慕呀!看来你找到了一个超棒的工作,可以享受不卷的生活啦!🎉有没有什么求职秘诀想要分享给小牛牛呢?或者,想不想知道我是谁呢?😉(点击我的头像,我们可以私信聊聊哦~)
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务