整数数组匹配

有两个数组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;
}
相关推荐
kyle~37 分钟前
机器视觉---熔池相机(穿透强光的视觉感知)
c++·数码相机·计算机视觉·机器人·焊接机器人
宏笋41 分钟前
C++ Coroutines(协程) 详解
c++
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维前缀和】:求区间和
c++·前缀和·csp·高频考点·信奥赛·求和区间和
黎阳之光1 小时前
黎阳之光:以视频孪生重构智能监盘,为燃机打造新一代智慧电厂大脑
大数据·人工智能·算法·安全·数字孪生
绝知此事2 小时前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树
kyle~2 小时前
机器人时间链路---工程流程示例
c++·3d·机器人·ros2
清木!2 小时前
排序算法比较
数据结构·算法·排序算法
吴可可1233 小时前
用Teigha修改并保存CAD文件
数据库·算法·c#
汉克老师3 小时前
GESP6级C++考试语法知识(十七、数据结构(三、认识队列 Queue))
数据结构·c++·队列·gesp6级·gesp六级·数组模拟队列
灰灰勇闯IT4 小时前
ops-reduce:ReduceMax 与 ReduceMean 的并行优化
算法