当前位置: 首页 > news >正文

LeetCode 3444.使数组包含目标值倍数的最小增量

给你两个数组 nums 和 target 。

在一次操作中,你可以将 nums 中的任意一个元素递增 1 。

返回要使 target 中的每个元素在 nums 中 至少 存在一个倍数所需的 最少操作次数 。

示例 1:

输入:nums = [1,2,3], target = [4]

输出:1

解释:

满足题目条件的最少操作次数是 1 。

将 3 增加到 4 ,需要 1 次操作,4 是目标值 4 的倍数。
示例 2:

输入:nums = [8,4], target = [10,5]

输出:2

解释:

满足题目条件的最少操作次数是 2 。

将 8 增加到 10 ,需要 2 次操作,10 是目标值 5 和 10 的倍数。
示例 3:

输入:nums = [7,9,10], target = [7]

输出:0

解释:

数组中已经包含目标值 7 的一个倍数,不需要执行任何额外操作。

提示:

1 <= nums.length <= 5 * 10^4
1 <= target.length <= 4
target.length <= nums.length
1 <= nums[i], target[i] <= 10^4

题目想要让target中每个数都能在nums中找到一个倍数,比如target中有两个数3、5,那么需要nums中有一个数是3、5的最小公倍数的倍数,即15的倍数,如果target中的数是5、10,那么需要nums中有一个数是10的倍数,因此我们可以先计算出target中所有非空子集的最小公倍数,然后用暴力法dp,我们可以遍历nums中的所有数字,当前数字可以进行增加操作,也可以不进行增加操作,如果不对当前数字进行增加操作,就相当于nums中少了一个数字,问题变成了规模更小的同样问题;如果对当前数字进行增加操作,就找到target的每个非空子集使当前数字的增量,然后从target中去掉对应的非空子集,从num中去掉当前数字,问题又变成了规模更小的同样问题。

C++解法:

class Solution {
public:int minimumIncrements(vector<int>& nums, vector<int>& target) {int m = target.size();// 一共有2^m个target的非空子集vector<long long> lcms(1 << m, 1);// 计算每个非空子集的lcmfor (int i = 0; i < m; ++i) {int curBit = 1 << i;for (int j = 0; j < curBit; ++j) {lcms[j | curBit] = lcm(target[i], lcms[j]);}}// tmp保存中间结果,防止dfs溢出vector tmp(nums.size(), vector<long long>(1 << m, -1));// i是当前遍历到的nums数组位置,倒序遍历// j是target的子集,j的第n位的二进制为1表示第n个数字在集合中auto dfs = [&](this auto &&dfs, int i, int j) -> long long {// 如果没有子集了,返回0,表示不再需要增量if (j == 0) {return 0;}// 如果nums遍历完了,但还有target子集,则此次dfs作废,返回一个大数即可if (i < 0) {// 除2防止溢出return numeric_limits<long long>::max() / 2;}// res是引用long long &res = tmp[i][j];if (res != -1) {return res;}// 不修改当前遍历到的数字res = dfs(i - 1, j);int jBak = j;// 每次jBak & (j - 1),可以让j的二进制位中最右边的1变为0for (; j; j = jBak & (j - 1)) {// 选中每个子集,并修改当前数字,然后删去选中的数字和当前数字,继续dfs// jBak ^ j相当于二进制差集// (lcms[j] - nums[i] % lcms[j]) % lcms[j]作用是找出// nums[i]变为lcms[j]的倍数所需要的增量res = min(res, dfs(i - 1, jBak ^ j) + (lcms[j] - nums[i] % lcms[j]) % lcms[j]); }return res;};return dfs(nums.size() - 1, (1 << m) - 1);}
};

go解法:

func minimumIncrements(nums []int, target []int) int {n := len(nums)m := len(target)lcms := make([]int, 1 << m)lcms[0] = 1for i, v := range target {j := 1 << ifor k := 0; k < j; k++ {lcms[k | j] = lcm(v, lcms[k])} }tmp := make([][]int, n)for i := range tmp {tmp[i] = make([]int, 1 << m)for j := range tmp[i] {tmp[i][j] = -1}}var dfs func(int, int) intdfs = func(i, j int) (res int) {if (j == 0) {return 0}if (i < 0) {return math.MaxInt / 2}p := &tmp[i][j]if (*p != -1) {return *p}defer func() { *p = res }()res = dfs(i - 1, j)jBak := jfor ; j != 0; j = (j - 1) & jBak {res = min(res, dfs(i - 1, j ^ jBak) + (lcms[j] - nums[i] % lcms[j]) % lcms[j])}return res}return dfs(n - 1, (1 << m) - 1)
}func gcd(a, b int) int {for b != 0 {a, b = b, a % b}return a
}func lcm(a, b int) int {return a * b / gcd(a, b)
}

如果nums的长度为m,target的长度为n,那么计算所有lcm的过程的时间复杂度为O(2 m ^m m),而dfs的过程中,展开看相当于n次循环,每次循环了target子集的子集次,时间复杂度为O(n3 m ^m m),因此总的时间复杂度为O(n3 m ^m m)。

相关文章:

LeetCode 3444.使数组包含目标值倍数的最小增量

给你两个数组 nums 和 target 。 在一次操作中&#xff0c;你可以将 nums 中的任意一个元素递增 1 。 返回要使 target 中的每个元素在 nums 中 至少 存在一个倍数所需的 最少操作次数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3], target [4] 输出&#xff1a…...

2月9日星期日今日早报简报微语报早读

2月9日星期日&#xff0c;农历正月十二&#xff0c;早报#微语早读。 1、2025WTT新加坡大满贯&#xff1a;王楚钦林诗栋获得男双冠军&#xff1b; 2、海南万宁快查快处一起缺斤短两案件&#xff1a;拟罚款5万元&#xff0c;责令停业3个月&#xff1b; 3、四川宜宾市筠连县山体…...

MOSSE目标跟踪算法详解

1. 引言 MOSSE算法&#xff08;Multi-Object Spectral Tracking with Energy Regularization&#xff09;是多目标跟踪领域的一座里程碑式成果&#xff0c;被认为是开创性的工作&#xff0c;为后续研究奠定了重要基础。该算法通过创新性地结合频域特征分析与能量正则化方法&am…...

生成式聊天机器人 -- 基于Pytorch + Global Attention + 双向 GRU 实现的SeqToSeq模型 -- 下

生成式聊天机器人 -- 基于Pytorch Global Attention 双向 GRU 实现的SeqToSeq模型 -- 下 训练Masked 损失单次训练过程迭代训练过程 测试贪心解码(Greedy decoding)算法实现对话函数 训练和测试模型完整代码 生成式聊天机器人 – 基于Pytorch Global Attention 双向 GRU 实…...

本地部署的DeepSeek-R1-32B与DeepSeek-R1-7B模型效果对比

本地部署的DeepSeek-R1-32B与DeepSeek-R1-7B模型效果对比 在当今人工智能快速发展的时代,大语言模型(Large Language Model, LLM)的应用场景日益广泛。无论是企业级应用还是个人开发,本地部署大语言模型已经成为一种趋势。DeepSeek-R1-32B和DeepSeek-R1-7B作为DeepSeek系列…...

AWS Fargate

AWS Fargate 是一个由 Amazon Web Services (AWS) 提供的无服务器容器计算引擎。它使开发者能够运行容器化应用程序&#xff0c;而无需管理底层的服务器或虚拟机。简而言之&#xff0c;AWS Fargate 让你只需关注应用的容器本身&#xff0c;而不需要管理运行容器的基础设施&…...

表单与交互:HTML表单标签全面解析

目录 前言 一.HTML表单的基本结构 基本结构 示例 二.常用表单控件 文本输入框 选择控件 文件上传 按钮 综合案例 三.标签的作用 四.注意事项 前言 HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础&#xff0c;其中表单&#xff08;<form>&…...

【电机控制器】STC8H1K芯片——低功耗

【电机控制器】STC8H1K芯片——低功耗 文章目录 [TOC](文章目录) 前言一、芯片手册说明二、IDLE模式三、PD模式四、PD模式唤醒五、实验验证1.接线2.视频&#xff08;待填&#xff09; 六、参考资料总结 前言 使用工具&#xff1a; 1.STC仿真器烧录器 提示&#xff1a;以下是本…...

win10 llamafactory模型微调相关① || Ollama运行微调模型

目录 微调相关 1.微调结果评估 2.模型下载到本地 导出转换&#xff0c;Ollama运行 1.模型转换&#xff08;非常好的教程&#xff01;&#xff09; 2.Ollama 加载GGUF模型文件 微调相关 1.微调结果评估 【06】LLaMA-Factory微调大模型——微调模型评估_llamafactory评估-C…...

SMU寒假训练周报

训练情况 本周是第一周&#xff0c;训练情况不是很好&#xff0c;因为从期末周到现在一直没训练&#xff0c;不是在复习就是在忙其他的事情&#xff0c;导致状态下滑很严重&#xff0c;没有什么代码的感觉&#xff0c;而且回家之后的事情也挺多&#xff0c;社会实践的时间有时…...

高并发读多写少场景下的高效键查询与顺序统计的方案思路

之前在某平台看到一篇有意思的场景——对于高并发读多写少场景下&#xff0c;如何进行高效键查询与统计早于其创建时间且没有被删除的数量&#xff08;只需要先入先出&#xff0c;不需要从中间删元素&#xff09; 在高并发、读多写少的场景下&#xff0c;业务需求通常聚焦在以…...

Android Studio 配置 Gerrit Code Review

很多大厂&#xff08;华为、荣耀&#xff09;的大型项目都有gerrit代码审查流程&#xff0c;那么我们如何实现不手动敲命令行&#xff0c;就在Android Studio中像平常开发一样&#xff0c;只需要用鼠标点点点&#xff0c;就能将代码推送到gerrit审查仓呢&#xff0c;现在就来跟…...

html为<td>添加标注文本

样式说明&#xff1a; /*为td添加相对定位点*/ .td_text {position: relative; }/*为p添加绝对坐标(相对于父元素中的定位点)*/ .td_text p {position: absolute;top: 80%;font-size: 8px; }参考资料&#xff1a;...

(done) openMP学习 (Day10: Tasks 原语)

url: https://dazuozcy.github.io/posts/introdution-to-openmp-intel/#19-%E6%8A%80%E8%83%BD%E8%AE%AD%E7%BB%83%E9%93%BE%E8%A1%A8%E5%92%8Copenmp 本章节内容仅提供引入&#xff0c;关于 task 更详细的细节请看 openMP 手册或者源材料 Day9 介绍了一个优化链表遍历的粗糙方…...

力扣-字符串-28 找出字符串中第一个匹配项的下标

思路 kmp算法的练习&#xff0c;实际上来说在构建next数组和使用next数组都用到了前一位字符串的最长相等前后缀 代码 class Solution { public:void getNext(int *next, string s){int j 0;next[0] 0;for(int i 1; i < s.size(); i){while(j > 0 && s[j] …...

linux 基础知识点之工作队列workqueue

多年前就了解了workqueue着玩意&#xff0c;但理解上就并不是很很深刻&#xff0c;今天重新梳理一下&#xff0c;本文重点的是哪个些现成的demo代码&#xff0c;都是可以直接拿来用的&#xff0c;这就是写这文章的目的和作用&#xff0c;就是为了备份后续工作用到的时候&#x…...

C++蓝桥杯基础篇(二)

片头 嗨&#xff01;小伙伴们&#xff0c;今天我们将学习C蓝桥杯基础篇&#xff08;二&#xff09;&#xff0c;继续练习相关习题&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 第1题 简单计算器输入两个数&#xff0c;以及一个运算符 &#xff0c;-&#xff0c;*&#xff…...

【Android—OpenCV实战】实现霍夫圆检测针对沙盘交通灯信号检测

文章目录 Android OpenCV实战&#xff1a;霍夫圆检测实现沙盘交通灯智能识别&#x1f31f; 引言&#xff1a;当计算机视觉遇见智慧交通&#x1f50d; 霍夫圆检测原理剖析&#x1f50d; 数学之美&#xff1a;参数空间转换&#x1f50d; 关键参数解析 &#x1f6e0; Android实现全…...

WPS如何接入DeepSeek(通过JS宏调用)

WPS如何接入DeepSeek 一、文本扩写二、校对三、翻译 本文介绍如何通过 WPS JS宏调用 DeepSeek 大模型&#xff0c;实现自动化文本扩写、校对和翻译等功能。 一、文本扩写 1、随便打开一个word文档&#xff0c;点击工具栏“工具”。 2、点击“开发工具”。 3、点击“查看代码”…...

图论——环检测

环检测以及拓扑排序 前言复习模版环检测-DFS版本环检测- BFS版本 前言 我觉得学习这些之前,一定要对图的数据结构和抽象模型有概念,并且图构建的代码模版应该手到擒来,不然还是挺折磨的,不是这差一点就是那差一点,写道力扣卡卡的非常烦人. 复习模版 我觉得单拿出来再说这个模…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...