题解 | 牛牛的数组匹配

牛牛的数组匹配

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

#include <stdio.h>

int get_distance(int b[], int i, int m, int *temp, int suma)
{
    int sumb = 0;
    int j = 0;
    int distance = 0;

    for (j=i; j<m; ++j)
    {
        sumb += b[j];

        if (sumb > suma)
        {
            break;
        }
    }

    if (j == m)
    {
        distance = suma - sumb;
        *temp = j - 1;
    }
    else
    {
        if (m - i > 1)
        {
            int d1 = suma - (sumb-b[j]);
            int d2 = sumb - suma;
            
            if (d2 < d1)
            {
                distance = d2;
                *temp = j;
            }
            else
            {
                distance = d1;
                *temp = j - 1;
            }
        }
        else//只有一个元素
        {
            distance = sumb - suma;
            *temp = j;
        }
    }

    return distance;
}


int main() {
    int n = 0; //数组a的长度
    int m = 0; //数组b的长度
    scanf("%d %d", &n, &m);
    int a[n];
    int b[m];
    int suma = 0; //a数组元素之和
    int left = 0; //目标子数组左下标
    int right = 0; //目标子数组右下标
    int k = 0; // 暂存子数组元素之和
    int distance = 32767; //子数组元素之和与suma的距离
    int temp = 0; //暂存目标子数组右下标

    for (int i=0; i<n; ++i)
    {
        scanf("%d", &a[i]);
        suma += a[i];
    }

    for (int i=0; i<m; ++i)
    {
        scanf("%d", &b[i]);
    }

    for (int i=0; i<m; ++i)
    {
        k =  get_distance(b, i, m, &temp, suma); 

        if (k == 0)
        {
            left = i;
            right = temp;
            break;
        } 

        if (distance > k)
        {
            distance = k;
            left = i;
            right = temp;
        }
    }

    for (int i = left; i<= right; ++i)
    {
        printf("%d ", b[i]);
    }

    return 0;
}

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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