整数数组匹配

有两个数组a和b数组,都是正数的数组,a的数组总和在b数组中哪一块连续的空间差值最小,如果找到了,就打印b数组中的数组元素,首先解决这个问题需要有两个数组,还需要把a数组的总和求出来,求出来以后对比b数组,一个一个对比,两层循环,分别从0开始匹配,left不动,让right从1到最后以次累加起来和a数组总和进行对比,如果right所记录的值比求得的差值要小,就让min被重新赋值,然后记录当前的left和right,一直循环下去直到遍历完整个数组,打印templeft和tempright中间的值,这种方法是暴力求解,时间复杂最坏的情况下是O(n^2)

复制代码
#include <stdio.h>

int main() {
    //输入
    int n=0;
    int m=0;
    scanf("%d %d",&n,&m);//两个值
    int a[n];
    int b[m];
    int i=0;
    int sum=0;
    for(i=0;i<n;i++)//n是a
    {
        scanf("%d",&a[i]);
        sum+=a[i];//求得总和
    }
    for(i=0;i<m;i++)
    {
        scanf("%d",&b[i]);
    }
    //得到了a数组的总大小
    int min=INT_MAX;//把初始的min赋值为一个最大值
    int left;//左边的下标
    int right;//右边的下标
    i=0;//i重新赋值为0,从下标为零开始循环
    int tempsum=0;//记录每次right+1的值
    int tempright=0;//记录需要被打印的右边下标
    int templeft=0;//记录需要被打印的左边的下标
    while(i<m)//m代表b
    { 
        left=i;//开始都是从0开始累加
        right=i;
        tempsum=0;//每次结束一次循环tempsum都要初始化为0
        while(right<m)//right以次累加
        {
           tempsum+=b[right];//累加
   
           int tempmin=sum>tempsum?sum-tempsum:tempsum-sum;//计算差值,保证差值是正值
           if(tempmin<min)//如果临时的差值比定义的差值小,就把right left tempmin赋值
           {
              min=tempmin;
              tempright=right;
              templeft=left;
           }
            if(tempsum>=sum)//如果tmepsum都已经大于sum而且b数组都是正数,越加只会越大
           {
            break;
           }
            right++;//向后累加
        }
        i++;//遍历数组
    }
    for(i=templeft;i<=tempright;i++)
    {
        printf("%d ",b[i]);
    }
    return 0;
}
相关推荐
静听山水6 小时前
Redis核心数据结构-Hash
数据结构·redis·哈希算法
Trouvaille ~6 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
啊阿狸不会拉杆6 小时前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝
Mr_Xuhhh6 小时前
C++11实现线程池
开发语言·c++·算法
若水不如远方6 小时前
分布式一致性(三):共识的黎明——Quorum 机制与 Basic Paxos
分布式·后端·算法
zhim006 小时前
数据结构笔记(上)(看这亿点就够了)
数据结构
only-qi6 小时前
leetcode24两两交换链表中的节点 快慢指针实现
数据结构·算法·链表
多恩Stone7 小时前
【3D AICG 系列-9】Trellis2 推理流程图超详细介绍
人工智能·python·算法·3d·aigc·流程图
sin_hielo7 小时前
leetcode 110
数据结构·算法·leetcode
整得咔咔响7 小时前
贝尔曼最优公式(BOE)
人工智能·算法·机器学习