C语言每日一题(17)数组匹配

news2024/12/25 2:32:20

牛客网 BC156 牛牛的数组匹配

题目描述

描述

牛牛刚学会数组不久,他拿到两个数组 a 和 b,询问 b 的哪一段连续子数组之和与数组 a 之和最接近。

如果有多个子数组之和同样接近,输出起始点最靠左的数组。

输入描述:

第一行输入两个正整数 n 和 m ,表示数组 a 和 b 的长度。

第二第三行输入 n 个和 m 个正整数,表示数组中 a 和 b 的值。

输出描述:

输出子数组之和最接近 a 的子数组

思路分析

基于滑动窗口的思想,从数组最左边开始,将连续子数组之和与numa(a数组里的总和)进行比较。

步骤流程

1.定义所需要输入的数n和m,需要输入的数组a和b,输入a数组时记得求a数组的和(numa)

2.输入完成后,开始进行循环

3.这里需要考虑一个特殊情况,就是当m==1时,就无须进行比较了,直接将b【0】输出即可。

定义left和right分别指向数组最左边的最小连续数组的下标,left=0,right=1,为了之后的方便输出,我们再定义一个cl和cr记录left和right的值。

循环的条件是left<right的同时right<m。

每一次循环:求left和right之间值的和sum,并将sum与numa的差值与min(定义的最小差值,最开始等于numa)进行比较,如果小于min,就将该值赋给min,同时将left的值赋给cl,right的值赋给cr,之后再判断sum的值是否大于numa,大于则left++,小于则right++,(防止连续子数组越来越大)

循环结束后,输出cl和cr之间的值。

完整代码

#include <stdio.h>
#include<stdlib.h>
int main() {
    int a[50]={0};
    int b[50]={0};
    int n=0;
    int m=0;
    scanf("%d %d",&n,&m);
    int suma=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]);
    }
    int left=0;
    int right=1;
    int cl=0;
    int cr=0;
    int min=suma;//最小差值,最开始=numa
    if(m==1)//m=1的情况直接输出
    {
        printf("%d",b[0]);
        return 0;
    }
    while(left<right&&right<m)
    {
        int sum=0;
        for(int i=left;i<=right;i++)
        {
            sum+=b[i];
        }
        if(abs(sum-suma)<min)//abs函数用来求两者之间差的绝对值
        {
            min=abs(sum-suma);
            cl=left;
            cr=right;
        }
        if(sum>suma)//判断sum与numa的情况
        {
            left++;
        }
        if(sum<suma)
        {
            right++;
        }
    }

    for(int i=cl;i<=cr;i++)//输出
    {
        printf("%d ",b[i]);
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在不损失质量的情况下调整图像大小

如何在不损失质量的情况下调整图像大小 如果您在线工作&#xff0c;就会知道图像质量对于呈现干净专业的外观有多么重要。 库存图像和免版税图像很容易找到&#xff0c;但是如何在不损失质量的情况下调整图像大小以使其适合您的目的&#xff1f; 无论您是想将图片用于博客文…

【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 变量 1. 局部变量与成员变量的区别&#xff1a…

小白必看,手把手教你安装Python

目录 一&#xff0c;Python介绍 二&#xff0c;安装 Python 三&#xff0c;各种疑难杂症&#xff1a; 一&#xff0c;Python介绍 Python 是这两年来比较流行的一门编程语言&#xff0c;主要卖点是其相对简单的语法以及丰富的第三方库&#xff0c;下面我来带大家安装、配置 P…

【七】SpringBoot为什么可以打成 jar包启动

SpringBoot为什么可以打成 jar包启动 简介&#xff1a;庆幸的是夜跑的习惯一直都在坚持&#xff0c;正如现在坚持写博客一样。最开始刚接触springboot的时候就觉得很神奇&#xff0c;当时也去研究了一番&#xff0c;今晚夜跑又想起来了这茬事&#xff0c;于是想着应该可以记录一…

Redis数据类型——list类型介绍及基本操作

1.list类型介绍 redis中的list就是一个双向链表的结构 2.list类型数据基本操作

己知一棵有 2011 个结点的树,其叶结点个数为 116,该树对应的二叉树无右孩子的结点个数是

前言 树转二叉树的规则&#xff1a;每个结点左指针指向它的第一个孩子&#xff0c;右指针指向它在树中相邻的右兄弟&#xff0c;即“左孩子右兄弟“。 拓展&#xff1a;树中一个叶子节点在转化为二叉树的时候&#xff0c;如果它有右兄弟&#xff0c;那么它右指针会指向其兄弟节…

【软件安装】Linux系统中安装MySQL数据库服务

这篇文章&#xff0c;主要介绍如何在Linux系统中安装MySQL数据库服务。 目录 一、Linux安装MySQL 1.1、下载MySQL安装包 1.2、解压MySQL安装包 1.3、更改存放目录 1.4、创建用户组和用户 1.5、创建数据目录data 1.6、创建my.cnf配置文件 1.7、初始化数据库 1.8、添加m…

报告从root到sink的clock tree物理长度的脚本

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 距离clock root物理距离最远的sink未必是latency最大的,但是往往clock path的长度受其影响,比如一些寄存器放在距离clock root很远的channel里,与其balance的reg就需要垫 delay detour buffer,即…

【Maven教程】(九):使用 Maven 进行测试 ~

目录 1️⃣ account-captcha 1.1 account-captcha 1.2 account-captcha 的主代码 1.3 account-captcha的测试代码 2️⃣ maven-surefire-plugin 简介 3️⃣ 跳过测试 4️⃣ 动态指定要运行的测试用例 5️⃣ 包含与排除测试用例 6️⃣ 测试报告 6.1基本的测试报告 6.…

鸿蒙应用开发之环境搭建

一、环境搭建 正所谓“工欲善其事&#xff0c;必先利其器”。在正式学习一门课程之前&#xff0c;我们首先需要做的就是搭建开发环境。首先&#xff0c;我们需要下载DevEco Studio&#xff0c;DevEco Studio支持Windows系统和macOS系统&#xff0c;在开发HarmonyOS应用/服务前…

力扣每日一题64:最小路径和

题目描述&#xff1a; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2…

高通Quick Charge快速充电原理分析

1 三段式AC充电器 涓流、恒流、恒压。 2 QC 2.0 2.1 高通Quick Charge 2.0 快速充电原理分析 QC 2.0快速充电需要手机端和充电器都支持才行。 当将充电器端通过数据线连到手机上时&#xff0c;充电器默认的是将D和D-短接的&#xff0c;这样手机端探测到的充电器类型是DCP&#…

【前端】Webpack5中Html和CSS的压缩打包

1.Webpack5简介 1.1.Webpack简介 &#xff08;1&#xff09;webpack的发展历程 2012.3—webpack&#xff08;问世&#xff09; 2014.2—webpack1 2016.12—webpack2 2017.6—webpack3 2018.2—webpack4 2020.10—webpack5&#xff08;要求node版本10.13&#xff09; &a…

iview项目中,radio选中值回显问题

问题描述&#xff1a;iviewvue项目中&#xff0c;数据从路由传参进入编辑页面&#xff0c;页面的radio选中状态首次显示&#xff0c;浏览器刷新后不显示&#xff1a; 1、首次进入&#xff1a; 2、浏览器手动刷新后&#xff1a; 经查&#xff0c;路由传参的值为字符串&#xff…

【ARM AMBA Q_Channel 详细介绍】

文章目录 1.1 Q_Channel 概述1.2 Q-Channel1.2.1 Q-Channel 接口1.2.2 Q-Channel 接口的握手状态1.2.3 握手信号规则 1.3 P_Channel的握手协议1.3.1 device 接受 PMU 的 power 请求1.3.2 device 拒绝 PMU 的 power 请求 1.4 device 复位信号与 Q _Channel 的结合1.4.1 RESETn 复…

驱动开发5 阻塞IO实例、IO多路复用

1 阻塞IO 进程1 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <string.h>int main(int argc, char co…

真空室的内表面加工

真空室和部件的内表面是在高真空和超高真空下实现工作压力的重要因素。必须在该条件下进行加工&#xff0c;以最小化有效表面&#xff0c;并产生具有最小解吸率的表面。 真空室和部件的表面往往是在焊接和机械加工后经过精细玻璃珠喷砂的。具有限定直径的高压玻璃珠被吹到表面…

Python创建条形图加点重叠

目录 代码效果图 要使用Python的Seaborn库创建一个条形图加点重叠的统计图&#xff0c;可以使用 seaborn.barplot和 seaborn.stripplot函数。以下是一个论文级别的简单示例代码&#xff0c;演示如何创建这种效果的图 代码 import seaborn as sns import matplotlib.pyplot a…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…

如何将 huggingface上的模型文件下载到本地

写在前面 缘由&#xff1a;国内的GPU服务器直接调取 huggingface 上模型经常会失败&#xff0c;因此下载到本地就能免去许多麻烦。 方法三基于知乎上一位博主所提出方法的基础上进行改进&#xff0c;可以将huggingface上模型由 Colab 存进 谷歌云盘 或者 百度云盘。特别是有些…