小米2025年校招笔试真题手撕(二)
一、题目
给一个长度为n的序列和一个整数x,每次操作可以选择序列中的一个元素,将其从序列中删去,或者将其值加一。
问至少操作多少次,可以使操作后的序列(可以为空)中数字之和是x的倍数。
输入描述:
第一行两个用空格隔开的正整数n和x,含义如问题描述中所述。
第二行是n个用空格隔开的正整数A[
1
],A[
2
],…,A[n],表示序列中n个元素的值。
n ≤
1000
,x ≤
1000
,A ≤
1000
输出描述:一行一个整数,表示使序列中数字之和是x的倍数所需要的最少操作数。
样例输入
1
:
1
3
4
样例输出:
1
解释:直接将序列中唯一的元素删去即可。
输入样例
2
:
3
5
1
3
3
输出:
2
解释:可能的一种操作为,删去最后一个元素,再使第一个元素加一,得到的序列为
2
3
。
二、分析
该问题要求我们找到最少的操作次数,使得经过若干次删除元素或加一操作后,序列的数字之和是给定整数x的倍数。操作包括删除一个元素或给一个元素加一,每次操作算一次。我们的目标是找到一个策略,通过这两种操作的组合,使得总和成为x的倍数,并且操作次数最少。
首先,我们需要理解问题的目标是让总和 S 满足 S ≡ 0 mod x。初始时,序列的总和为 sum。如果 sum 已经是x的倍数,那么不需要任何操作,直接返回0。否则,我们需要通过删除元素或增加元素的值来调整总和,使其成为x的倍数。
删除元素会减少总和,而加一则会增加总和。我们需要在这两种操作之间找到平衡,使得总和调整到最近的x的倍数,并且操作次数最少。
可能的策略包括:
1. **计算当前总和对x的余数**:计算初始总和 sum 对x取余得到 r。如果 r == 0,直接返回0。否则,我们需要调整总和,使其增加或减少一定的量,使得新的总和对x取余为0。
2. **考虑加一操作**:假设我们不删除任何元素,那么可以通过给某些元素加一来增加总和。需要增加的总和量为 (x - r) mod x。对于每个元素,我们可以计算将其增加到足够次数所需的操作数,使得总和增加 (x - r)。这可能适用于当总和接近x的下一个倍数时。
3. **考虑删除元素**:删除元素会减少总和。对于每个元素,我们可以计算删除它之后的新总和,并检查是否满足条件。此外,可能需要结合删除多个元素的情况。
4. **尝试所有可能的组合**:对于较小的n和x,可以尝试所有可能的删除和加一的组合,找到操作次数最少的方案。但这种方法在n较大时效率较低。
5. **动态规划**:可以考虑动态规划的方法,记录达到某个余数所需的最小操作次数。例如,我们可以维护一个数组 dp,其中 dp[i] 表示达到余数i所需的最小操作次数。初始时,dp[sum % x] = 0。然后,对于每个元素,我们可以更新 dp 数组,考虑加一或删除该元素后的效果。
在实现时,我们需要综合考虑上述策略,并选择最适合问题规模的方法。对于题目给定的约束条件(n ≤ 1000,x ≤ 1000,A ≤ 1000),动态规划可能是一个可行的选择。
以样例输入1为例:
输入:
1 3
4
初始总和是4,4 mod 3 = 1。我们需要调整总和到3的倍数。可以选择删除唯一的元素,操作次数为1,或者给该元素加2次达到6(3的倍数),操作次数为2。因此,最少操作次数是1。
样例输入2:
输入:
3 5
1 3 3
初始总和是7,7 mod 5 = 2。我们需要调整总和到5的倍数。可能的策略是删除最后一个3(总和变为4),然后给第一个元素加1(总和变为5,操作次数2)。或者有其他组合,但最少操作次数是2。
在代码实现中,我们需要遍历所有可能的操作组合,并找到操作次数最少的方案。这可能需要尝试所有可能的删除元素的子集,并计算对应的加一操作次数,或者使用动态规划来记录最小操作次数。
三、代码
说起来你们可能不信,这段代码是军哥给我的
n, x = map(int, input().split())
a = list(map(int, input().split()))sum_a = sum(a)
remainder = sum_a % xif remainder == 0:print(0)
else:dp = [float('inf')] * xdp[remainder] = 0for num in a:new_dp = dp.copy()for i in range(x):if dp[i] != float('inf'):# 删除当前元素new_remainder = i - (num % x)if new_remainder < 0:new_remainder += xnew_dp[new_remainder] = min(new_dp[new_remainder], dp[i] + 1)# 不删除当前元素new_remainder_add = (i + num) % xnew_dp[new_remainder_add] = min(new_dp[new_remainder_add], dp[i])dp = new_dpmin_operations = min(dp[0], len(a)) # 最坏情况下删除所有元素print(min_operations)
这段代码首先计算初始总和对x的余数。然后使用动态规划的方法来记录达到每个可能的余数所需的最小操作次数。对于每个元素,考虑两种情况:删除该元素或不删除该元素,更新动态规划数组。最后,取达到余数0所需的最小操作次数,或者删除所有元素的操作次数(作为最坏情况)。
相关文章:

小米2025年校招笔试真题手撕(二)
一、题目 给一个长度为n的序列和一个整数x,每次操作可以选择序列中的一个元素,将其从序列中删去,或者将其值加一。 问至少操作多少次,可以使操作后的序列(可以为空)中数字之和是x的倍数。 输入描述&#…...
弱网服务器群到底有什么用
在当今数字化的时代,大家都在追求高速、稳定的网络体验,但你是否想过,弱网服务器群其实也有着不可小觑的作用。让我们来聊聊什么是弱网服务器群。简单来说,它是一组在网络条件相对较差情况下运行的服务器集合。 弱网服务器群组是一…...

部署Gitlab-CE with Docker私有云环境
应用环境 Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64) Docker version 28.1.1, build 4eba377 文章目录 拉取容器镜像生成Run脚本参数解读实例脚本环境配置管理员密码遗忘服务邮箱配置邮件测试 运维问题集锦(1) 端口映射关系(2) 服务日志(3) 分支受保护 项目操作…...
拉普拉斯高斯(LoG)滤波器掩模的注意事项
目录 问题: 解答: 一、高斯函数归一化:消除幅度偏差 1. 归一化的定义 2. 为何必须归一化? 二、拉普拉斯系数和为零:抑制直流项干扰 1. 拉普拉斯算子的特性 2. 系数和不为零的后果 三、直流项如何影响零交叉点&…...

铠大师:让用户畅享多元应用,助力鸿蒙生态发展
在全球信息技术产业格局加速重构的背景下,中国科技力量正以开放包容的姿态重塑操作系统生态范式。 5月19日,华为在成都举办的nova14系列及鸿蒙电脑新品发布会上,正式对外发布搭载了鸿蒙系统的笔记本电脑HUAWEI MateBook Pro与HUAWEI MateBoo…...
RocketMQ核心特性与最佳实践
目录 1. 引言 2. RocketMQ核心特性 2.1 架构演进 2.2 核心组件 2.3 消息模型 2.4 高级特性 3. RocketMQ与其他MQ产品选型对比 3.1 功能特性对比 3.2 适用场景对比 3.3 选型建议 4. RocketMQ部署最佳实践 4.1 部署模式选择 4.2 硬件配置建议 4.3 操作系统优化 4.4…...
springboot配置redis lettuce连接池,以及连接池参数解释
文章目录 前置基本配置参数解释 前置 javaspringbootredislettuce 连接池 有很多连接池,比如 jedis,lettuce,redission,springboot 默认使用 lettuce 连接池 lettuce 连接池的特点是:一个 lettuce 连接可以被多个线…...

基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统
详细视频:【基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统。-哔哩哔哩】 https://b23.tv/zfqLWPV...

如何使用AI搭建WordPress网站
人工智能正迅速成为包括网页设计在内的许多行业在其功能设置中添加的一种工具。在数字设计和营销领域,许多成熟的工具都在其产品中添加了人工智能功能。WordPress 也是如此。作为目前最流行的网站建设工具之一,WordPress 的人工智能插件越来越多也就不足…...
打破双亲委派模型的实践:JDBC与Tomcat的深度解析
一、JDBC如何打破双亲委派模型 1. JDBC SPI机制的核心矛盾 Java数据库连接(JDBC)是打破双亲委派模型的经典案例,其根本原因在于基础类库需要加载实现类的矛盾: 核心接口位置:java.sql.Driver等接口位于rt.jar中,由启动类加载器…...
《打破枷锁:Python多线程GIL困境突围指南》
GIL,这个Python解释器层面的独特机制,虽在一定程度上守护了内存管理的秩序,却也成为了多线程并行的紧箍咒,限制了Python在多核处理器上的性能发挥。今天,让我们深入剖析GIL的本质,探寻突破这一枷锁的有效策…...

Java并发编程:全面解析锁策略、CAS与synchronized优化机制
一、六种锁策略场景化解析 1. 乐观锁 vs 悲观锁:图书馆借书的两种策略 核心差异:对资源是否会被抢占的预期不同。 乐观锁(假设冲突概率低) → 行为:直接去书架上拿书(围绕加锁要做的工作更少)…...

2025第三届黄河流域网络安全技能挑战赛--Crypto--WriteUp
2025第三届黄河流域网络安全技能挑战赛–Crypto–WriteUp Crypto sandwitch task from Crypto.Util.number import * import gmpy2 flag bflag{fake_flag} assert len(flag) 39 p getPrime(512) q getPrime(512) n p * q e 0x3 pad1 beasy_problem pad2 bHow_to_so…...

[爬虫知识] IP代理
相关实战案例:[爬虫实战] 代理爬取:小白也能看懂怎么用代理 相关爬虫专栏:JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 引言:爬虫与IP封锁的攻防战 对网络爬虫而言,遇到的一个较棘手的问题就是封IP:请…...

6个月Python学习计划 Day 1 - Python 基础入门 开发环境搭建
6个月Python学习计划:从入门到AI实战(前端开发者进阶指南) 🎯 今日目标 理解 Python 的背景和用途安装 Python 开发环境熟悉基本语法:变量、数据类型、打印输出动手编写第一个 Python 程序 🧠 学习内容详…...

GraphPad Prism工作表的基本操作
《2025新书现货 GraphPad Prism图表可视化与统计数据分析(视频教学版)雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism中包含5种工作表,每种工作表的基本操…...
Maven插件之docker-maven-plugin
介绍 在持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了实现…...

成年后还能学习多少知识,由大脑的这个数量决定
撰文|Anne Trafton 编译|郑添惺 审校|clefable 麻省理工学院(MIT)的一些神经科学家发现,成年的大脑中含有数百万个“静默突触”(silent synapses)。它们是神经元之间未成熟的神经突…...
Flask 会话管理:从原理到实战,深度解析 session 机制
1、Flask中session 的实现原理:服务器与客户端的协作 HTTP 协议是无状态的——服务器无法区分两次请求是否来自同一用户。这意味着,用户登录后跳转到其他页面时,服务器会“忘记”用户身份。 为解决这一问题,Web 开发中引入了会话…...

MySQL连接错误解决方案:Can‘t connect to MySQL server on ‘localhost‘ (10038)
错误描述 当您尝试连接MySQL数据库时,可能会遇到以下错误提示: 这个错误表明客户端无法连接到本地MySQL服务器。 可能的原因 MySQL服务未启动 MySQL配置问题 防火墙或安全软件阻止连接 端口被占用或未正确配置 网络连接问题 解决方案 方法一&am…...
【跨端框架检测】使用adb logcat检测Android APP使用的跨端框架方法总结
目录 Weex 跨端框架使用了uni-app的情况区分使用了uni-app还是Weex 判断使用了Xamarin判断使用了KMM框架判断使用了 Ionic 框架判断使用了Cordova框架判断使用了Capacitor 框架使用了React Native框架使用了QT框架使用了Cocos框架使用了Electron 框架使用了flutter 框架使用…...
lua脚本实战—— Redis并发原子性陷阱
需求分析 对于内容类网站,比如用户浏览题目的答案,需要先登录才能追溯,那么可以统计用户访问频率来限制数据的爬取。 可采用分级反爬虫策略,先告警、再采取强制措施: 如果每分钟超过 10 道题,给管理员发…...
【MySQL】第10节|MySQL全局优化与Mysql 8.0新增特性详解
全局优化 mysql server参数 1. max_connections(最大连接数) 含义:MySQL 服务允许的最大并发连接数(包括正在使用和空闲的连接)。超过此限制时,新连接会被拒绝(报错 Too many connections&am…...

CSS相关知识
1.清除浮动的方法 2.定位 静态定位相当于标准流 相对定位不脱离文档流,仍然占据原来的位置(最频繁的作用是给绝对定位当爹) 绝对定位脱离文档标准流,不再占有原来位置 3.BFC 1. 解决浮动元素导致的父容器高度塌陷 2. 阻止相邻元…...

AI扫描王APP:高效便捷的手机扫描工具,让生活更智能
AI扫描王APP是一款功能强大的手机扫描软件,专为追求高效、便捷的用户设计。它不仅支持文字提取和扫描翻译,还能进行测量,满足用户在不同场景下的需求。无论是办公、学习还是日常使用,AI扫描王都能帮助你快速完成任务,节…...

《仿盒马》app开发技术分享-- 原生地图展示(端云一体)
开发准备 上一节我们实现了获取当前用户的位置,并且成功的拿到了经纬度,这一节我们就要根据拿到的经纬度,结合我们其他的知识点来实现地图的展示。 功能分析 地图的展示,我们需要在管理中心先给我们对应的应用开启地图api功能&…...
Linux 操作文本文件列数据的常用命令
文章目录 Linux 操作文本文件列数据的常用命令基本列处理命令高级列处理列数据转换和排序列数据统计和分析 Linux 操作文本文件列数据的常用命令 Linux 提供了多种强大的命令来处理文本文件中的列数据,以下是一些最常用的命令和工具: 基本列处理命令 c…...

IP、子网掩码、默认网关、DNS
IP、子网掩码、默认网关、DNS 1. 概述1.1 windows配置处 2.IP 地址(Internet Protocol Address)2.1 公网ip2.2 内网ip2.3 🌐 公网 IP 与内网 IP 的关系(NAT) 3. 子网掩码(Subnet Mask)4. 默认网…...

华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

角度回归——八参数检测四边形Gliding Vertex
文章目录 一、介绍(一)五参数检测方法( 基于角度)(二)八参数检测方法(point-based)的边界 二、方案分析(一)问题定义(二)方案…...