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

第143场双周赛:最小可整除数位乘积 Ⅰ、执行操作后元素的最高频率 Ⅰ、执行操作后元素的最高频率 Ⅱ、最小可整除数位乘积 Ⅱ

Q1、最小可整除数位乘积 Ⅰ

1、题目描述

给你两个整数 nt 。请你返回大于等于 n最小 整数,且该整数的 各数位之积 能被 t 整除。

2、解题思路

  1. 问题拆解

    • 题目要求我们找到一个整数,其 数位的积 可以被 t 整除。

    • 数位的积 是指将数字的每一位相乘后的结果,例如 123 的数位积为 1 × 2 × 3 = 6 1 \times 2 \times 3 = 6 1×2×3=6

    • 如果某个数字包含 0,那么其数位积为 0,此时无法被 t 整除。

  2. 算法设计

    • 从整数 n 开始依次检查每个数字,直到找到第一个满足条件的数字。

    • 对于每个数字,计算其 数位积,然后判断是否可以被 t 整除。

    • 如果可以被 t 整除,则返回该数字;否则继续检查下一个数字。

  3. 辅助函数:digitProduct

    • 计算一个整数的数位积。

    • 如果数字中包含 0,则直接返回 0,因为数位积为 0

  4. 边界情况

    • 如果 t = 1,那么任何数字都满足条件,因此直接返回 n

    • 如果 t > 1,需要依次检查数字,直到找到满足条件的数字。

3、代码实现

class Solution {
public:int smallestNumber(int n, int t) {// 从 n 开始检查int cur = n;while (true) {// 如果当前数字的数位积可以被 t 整除, 返回当前数字if (digitProduct(cur) % t == 0) {return cur;}cur++; // 检查下一个数字}return -1; // 理论上永远不会到达这里}// 辅助函数: 计算一个数字的数位积int digitProduct(int x) {// 初始化数位积为 1int product = 1;while (x > 0) {// 取当前数字的最低位int digit = x % 10;if (digit == 0) {// 如果包含 0, 则数位积为 0return 0;}// 更新数位积product *= digit;// 去掉最低位x /= 10;}// 返回最终的数位积return product;}
};

在这里插入图片描述

4、复杂度分析

时间复杂度分析

  1. 数字检查
    • 最坏情况下,从 n 开始逐一递增检查,直到找到满足条件的数字。设答案为 n + k,最多需要检查 k 个数字。
  2. 数位积计算
    • 对于每个数字,计算数位积的复杂度与其位数成正比,假设数字最大有 O(\log n) 位。

总时间复杂度

  • 最坏情况下,复杂度为 O ( k × log ⁡ n ) O(k \times \log n) O(k×logn),其中 k 是找到满足条件的数字所需的检查次数。

Q2、执行操作后元素的最高频率 Ⅰ

Q3、执行操作后元素的最高频率 Ⅱ

这两题答案一样,放在一起

1、题目描述

给你一个整数数组 nums 和两个整数 knumOperations

你必须对 nums 执行 操作 numOperations 次。每次操作中,你可以:

  • 选择一个下标 i ,它在之前的操作中 没有 被选择过。
  • nums[i] 增加范围 [-k, k] 中的一个整数。

在执行完所有操作以后,请你返回 nums 中出现 频率最高 元素的出现次数。

一个元素 x频率 指的是它在数组中出现的次数。

2、解题思路

本问题的核心是如何利用 numOperations 次操作,通过调整数组元素的值来使得某个元素的频率最大化。

解法 1:基于前缀和的差分数组优化
  1. 使用差分数组记录可调整的范围
    • 对于数组中每个元素 num,可以通过增加范围 [−k,k] 内的整数,将 num 的值调整到 [num−k,num+k]
    • 利用差分数组 diff 来记录调整范围的增减:
      • diff[num-k] 位置加 1,表示从该位置开始可以增加 1。
      • diff[num+k+1] 位置减 1,表示该位置之后的值减少 1。
    • 通过遍历 diff,累加值即可知道每个数的覆盖频率。
  2. 结合操作次数限制
    • 直接记录数组中每个数 num 的原始频率 cnt[num]
    • 更新累积频率时,确保频率不超过 cnt[num] + numOperations
  3. 计算最大频率
    • 遍历差分数组,动态更新每个数的最大频率。
解法1:代码实现
class Solution {
public:int maxFrequency(vector<int>& nums, int k, int numOperations) {unordered_map<int, int> cnt; // 原始频率表map<int, int> diff;          // 差分数组// 初始化频率表和差分数组for (const auto& num : nums) {cnt[num]++;          // 记录每个数的原始频率diff[num];           // 确保下面遍历的时候能够遍历到diff[num - k]++;     // 差分数组起点加 1diff[num + k + 1]--; // 差分数组终点减 1}int ret = 0, count = 0;// 遍历差分数组, 动态更新频率for (const auto& [num, c] : diff) {count += c; // 累加当前数的频率变化ret = max(ret, min(count, cnt[num] + numOperations)); // 计算最大频率}return ret;}
};
解法 2:基于滑动窗口的区间扩展
  1. 排序数组
    • 通过排序,方便计算将某个值扩展到某范围的成本,特别是考虑连续区间的情况下。
    • 排序后,如果将 nums[right] 扩展到等于 nums[left],可以更高效地计算操作次数。
  2. 双层滑动窗口
    • 第一部分:统计当前元素 x 的最大频率。
      • 遍历数组时,动态更新窗口内与 x 可调整范围内的值个数。
    • 第二部分:优化操作,统计全局范围内的频率最大值。
  3. 边界处理
    • 如果可以直接达到 numOperations 次操作,直接返回结果。
解法2:代码实现
class Solution {
public:int maxFrequency(vector<int>& nums, int k, int numOperations) {ranges::sort(nums); // 排序数组int n = nums.size();int ret = 0, cnt = 0, left = 0, right = 0;// 计算当前值 x 的最大频率for (int i = 0; i < n; ++i) {int x = nums[i];cnt++; // 当前 x 的频率增加if (i < n - 1 && x == nums[i + 1]) {continue; // 跳过连续相同元素}// 调整左、右边界, 统计 x 的最大频率while (nums[left] < x - k) {left++;}while (right < n && nums[right] <= x + k) {right++;}ret = max(ret, min(right - left, cnt + numOperations));cnt = 0; // 重置计数}if (ret >= numOperations) {return ret;}// 优化: 全局范围统计最大频率left = 0;for (int right = 0; right < n; ++right) {int x = nums[right];while (nums[left] < x - k * 2) {left++;}ret = max(ret, right - left + 1);}return min(ret, numOperations);}
};

在这里插入图片描述

3、复杂度分析

两种解法的对比

解法时间复杂度空间复杂度适用场景
解法 1(差分数组) O ( n log ⁡ n ) O(n \log n) O(nlogn) O ( n ) O(n) O(n)适用于需要精确调整每个数范围的场景
解法 2(滑动窗口) O ( n log ⁡ n ) O(n \log n) O(nlogn) O ( 1 ) O(1) O(1)适用于连续区间扩展、排序后处理的问题

Q4、最小可整除数位乘积 Ⅱ

1、题目描述

给你一个字符串 num ,表示一个 整数,同时给你一个整数 t

如果一个整数 没有 任何数位是 0 ,那么我们称这个整数是 无零 数字。

请你返回一个字符串,这个字符串对应的整数是大于等于 num最小无零 整数,且 各数位之积 能被 t 整除。如果不存在这样的数字,请你返回 "-1"

2、解题思路

  1. 因子分解检查

    • 如果 t 包含大于 7 的质因子(如 11, 13 等),无法找到符合条件的整数,因为我们只能用 1-9 的数位组成数字,且这些数位的乘积无法包含大于 7 的质因子。
  2. 前缀 GCD 检查

    • num 逐位计算其数位乘积和 t 的 GCD。

    • 如果整个 num 的数位乘积已经满足 t 的整除条件,直接返回 num

  3. 调整当前数字

    • 如果 num 的乘积不能整除 t,需要从低位到高位尝试调整数字:
      • 增大某一位数字,使得新的数位乘积可以整除 t
      • 从调整的位后面开始重新构造数字,确保是最小无零整数。
  4. 增加数字长度

    • 如果调整当前数字无法满足条件,则结果一定比 num 长。

    • t 分解为 2−9 的因子组合,构造最小无零整数。

3、代码实现

class Solution {
public:string smallestNumber(string s, long long t) {// 检查 t 是否包含大于 7 的质因子long long temp = t;for (int i = 9; i > 1; i--) {while (temp % i == 0) {temp /= i;}}// t 包含大于 7 的质因子, 无法生成符合条件的数字if (temp > 1) {return "-1";}// 数字的长度int n = s.length();// gcdPrefix[i] 表示从左到第 i 个字符的 gcd 前缀vector<long long> gcdPrefix(n + 1, 0);gcdPrefix[0] = t;// 第一个 0 出现的位置, 默认为最后一位int firstZeroIndex = n - 1;// 计算前缀 gcd 并找到第一个 0for (int i = 0; i < n; i++) {if (s[i] == '0') {// 记录第一个 0 出现的位置firstZeroIndex = i;break;}gcdPrefix[i + 1] = gcdPrefix[i] / gcd(gcdPrefix[i], s[i] - '0');}// 如果 num 的各位乘积是 t 的倍数, 直接返回 numif (gcdPrefix[n] == 1) {return s;}// 尝试调整 num, 使其成为满足条件的最小无零数字for (int i = firstZeroIndex; i >= 0; i--) {while (++s[i] <= '9') {long long reducedT = gcdPrefix[i] / gcd(gcdPrefix[i], s[i] - '0');// 当前可用的最大数字int maxDigit = 9;for (int j = n - 1; j > i; j--) {while (reducedT % maxDigit != 0) {// 寻找下一个可用的最大数字maxDigit--;}reducedT /= maxDigit;// 更新当前数字s[j] = '0' + maxDigit;}if (reducedT == 1) {// 找到满足条件的最小无零数字return s;}}}// 如果无法通过调整当前 num 实现目标, 答案一定比 num 长string result;for (int i = 9; i > 1; i--) {while (t % i == 0) {result += '0' + i;t /= i;}}// 补充剩余的位数为 1result += string(max(n + 1 - (int)result.length(), 0), '1');// 反转字符串以得到最终结果reverse(result.begin(), result.end());return result;}
};

在这里插入图片描述

4、复杂度分析

  1. 时间复杂度
  • 因子分解检查: O ( log ⁡ t ) O(\log t) O(logt)
  • 前缀 GCD 计算: O ( n ) O(n) O(n),其中 n 是 num 的长度。
  • 数字调整:最多尝试 O ( n × log ⁡ t ) O(n \times \log t) O(n×logt)
  • 整体复杂度: O ( n × log ⁡ t ) O(n \times \log t) O(n×logt)

空间复杂度

  • 使用了前缀 GCD 数组,空间复杂度为 O ( n ) O(n) O(n)


相关文章:

第143场双周赛:最小可整除数位乘积 Ⅰ、执行操作后元素的最高频率 Ⅰ、执行操作后元素的最高频率 Ⅱ、最小可整除数位乘积 Ⅱ

Q1、最小可整除数位乘积 Ⅰ 1、题目描述 给你两个整数 n 和 t 。请你返回大于等于 n 的 最小 整数&#xff0c;且该整数的 各数位之积 能被 t 整除。 2、解题思路 问题拆解&#xff1a; 题目要求我们找到一个整数&#xff0c;其 数位的积 可以被 t 整除。 数位的积 是指将数…...

【STM32】LED状态翻转函数

1.利用状态标志位控制LED状态翻转 在平常编写LED状态翻转函数时&#xff0c;通常利用状态标志位实现LED状态的翻转。如下所示&#xff1a; unsigned char led_turn_flag; //LED状态标志位&#xff0c;1-点亮&#xff0c;0-熄灭/***************************************函…...

uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?

前言 在开发微信小程序时&#xff0c;使用 textarea 组件可能会遇到一些棘手的问题。最近我在使用 uniapp 开发微信小程序时&#xff0c;就遇到了两个非常令人头疼的问题&#xff1a; 层级穿透&#xff1a;由于 textarea 是原生组件&#xff0c;任何元素都无法遮盖住它。当其…...

汽车 SOA 架构下的信息安全新问题及对策漫谈

摘要&#xff1a;随着汽车行业的快速发展&#xff0c;客户和制造商对车辆功能的新需求促使汽车架构从面向信号向面向服务的架构&#xff08;SOA&#xff09;转变。本文详细阐述了汽车 SOA 架构的协议、通信模式&#xff0c;并与传统架构进行对比&#xff0c;深入分析了 SOA 给信…...

Unity-Mirror网络框架-从入门到精通之RigidbodyPhysics示例

文章目录 前言示例一、球体的基础配置二、三个球体的设置差异三、示例意图LatencySimulation前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开…...

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意&#xff1a;小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务&#xff0c;如果没有就在插件管理中添加插件 2.腾讯位置服务…...

H3CNE-12-静态路由(一)

静态路由应用场景&#xff1a; 静态路由是指由管理员手动配置和维护的路由 路由表&#xff1a;路由器用来妆发数据包的一张“地图” 查看命令&#xff1a; dis ip routing-table 直连路由&#xff1a;接口配置好IP地址并UP后自动生成的路由 静态路由配置&#xff1a; ip…...

多线程锁

在并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是一种用于控制多个线程对共享资源访问的机制。正确使用锁可以确保数据的一致性和完整性&#xff0c;避免出现竞态条件&#xff08;Race Condition&#xff09;、死锁&#xff08;Deadlock&#xff09;等问题。Java 提供…...

ZooKeeper 核心知识全解析:架构、角色、节点与应用

1.ZooKeeper 分布式锁怎么实现的 ZooKeeper 是一个高效的分布式协调服务&#xff0c;它提供了简单的原语集来构建更复杂的同步原语和协调数据结构。利用 ZooKeeper 实现分布式锁主要依赖于它的顺序节点&#xff08;Sequential Node&#xff09;特性以及临时节点&#xff08;Ep…...

笔记本电脑 选购 回收 特权模式使用 指南

笔记本电脑 factor 无线网卡&#xff1a;有些笔记本无法检测到特定频段的信息&#xff0c;会导致连不上校园网 sudo iwlist wlp2s0 scan | grep Frequency > net.txt cat net.txt>表示用终端输出覆盖后续文件&#xff0c;>>表示添加到后续文件的末尾 一种更简…...

2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一

2023-2024 学年 广东省职业院校技能大赛(高职组“信息安全管理与评估”赛题一&#xff09; 模块一:网络平台搭建与设备安全防护第一阶段任务书任务 1&#xff1a;网络平台搭建任务 2&#xff1a;网络安全设备配置与防护DCRS:DCFW:DCWS:DCBC:WAF: 模块二&#xff1a;网络安全事件…...

C#补充----反射,特性,迭代器,特殊语法,值类型运用类型。

1.反射&#xff1a;通过type 获取类中的数据。创建实例&#xff0c;并赋值。 《1》获取类的方式 《2》反射的应用 <1>获取类型的所有公共成员 <2>获取构造函数 <3>获取类型的 公共成员变量 <4>获取类型的 公共方法 <5>.获取类型的 属性 <6&g…...

深度学习核函数

一、核函数的基本概念 核函数在机器学习中具有重要应用价值&#xff0c;常用于支持向量机&#xff08;SVM&#xff09;等算法中。 核函数是面试中经常被考到的知识点&#xff0c;对于找工作和实际数据转换都有重要作用。 二、数据建模与核函数的作用 数据越多&#xff0c;可…...

Spring MVC流程一张图理解

由于现在项目中大部分都是使用springboot了&#xff0c;但是ssm中的springmvc还是可以了解一下 1 、用户发送请求至前端控制器 DispatcherServlet 。 2 、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。 3 、处理器映射器找到具体的处理器 ( 可以根据 xml 配…...

计算机网络速成

前言&#xff1a;最近在做一些动态的crypto&#xff0c;但是配置总搞不好&#xff0c;正好也有学web的想法&#xff0c;就先学学web再回去做密码&#xff0c;速成视频推荐b站建模老哥 目录 计算机网络概述网络的范围分级电路交换网络&#xff08;电路交换&#xff09;报文交换网…...

spring.profiles.active不同优先级

1、在editConfiguration中配置profiles.activedev会同时影响项目取application-dev.properties、bootstrap-dev.yaml&#xff0c;且这种方式优先级最高&#xff0c;会覆盖application.properties、bootstrap.yaml中的spring.profiles.active配置 2、在application.properties配…...

我这不需要保留本地修改, 只需要拉取远程更改

如果你不需要保留本地修改&#xff0c;只需要拉取远程更改并强制将本地分支与远程分支同步&#xff0c;可以按照以下步骤操作&#xff1a; 1. 丢弃本地修改 首先&#xff0c;丢弃所有本地未提交的修改&#xff1a; git reset --hard这会重置工作目录和暂存区&#xff0c;丢弃…...

源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)

下载 httpd 2.4 源码&#xff1a; wget https://dlcdn.apache.org/httpd/httpd-2.4.x.tar.gztar -zxvf httpd-2.4.x.tar.gzcd httpd-2.4.x配置、编译和安装&#xff1a; ./configure --prefix/usr/local/apache2 --enable-so --enable-ssl --enable-cgi makesudo make install实…...

深度学习在自动化测试中的创新应用:提升运维效率与质量

《深度学习在自动化测试中的创新应用:提升运维效率与质量》 一、引言 在当今快速发展的软件行业中,自动化测试是确保软件质量和可靠性的关键环节。随着软件系统的日益复杂,传统的自动化测试方法在处理复杂场景、提高测试覆盖率和准确性方面面临着诸多挑战。深度学习作为人…...

单独编译QT子模块

单独编译QT子模块 系统 win qt-everywhere-src-5.12.12 下载源码&#xff1a; https://download.qt.io/archive/qt/5.12/5.12.12/single/ 参考&#xff1a; https://doc.qt.io/qt-5/windows-building.html 安装依赖 https://doc.qt.io/qt-5/windows-requirements.html Per…...

s2-pro语音合成新玩法:用标签控制语气,轻松制作带情绪的语音内容

s2-pro语音合成新玩法&#xff1a;用标签控制语气&#xff0c;轻松制作带情绪的语音内容 1. 语音合成技术的新突破 在数字内容创作领域&#xff0c;语音合成技术正变得越来越重要。传统的语音合成系统往往只能生成单调、机械的语音&#xff0c;缺乏情感表达和自然韵律。而s2-…...

Qwen3.5-2B入门指南:如何将本地7860服务映射为公网可访问API接口

Qwen3.5-2B入门指南&#xff1a;如何将本地7860服务映射为公网可访问API接口 1. 引言 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型&#xff0c;属于Qwen3.5系列的小参数版本&#xff08;20亿参数&#xff09;。这个模型主打低功耗、低门槛部署&#xff0c;特别适合在端侧和…...

PyTorch 2.8镜像部署教程:RTX 4090D配置htop实时监控GPU/CPU/内存使用

PyTorch 2.8镜像部署教程&#xff1a;RTX 4090D配置htop实时监控GPU/CPU/内存使用 1. 环境准备与快速部署 在开始之前&#xff0c;请确保您的硬件配置满足以下要求&#xff1a; 显卡&#xff1a;RTX 4090D 24GB显存内存&#xff1a;120GB及以上存储&#xff1a;系统盘50GB …...

计算机毕业设计:Python汽车销售数据爬虫可视化分析平台 Flask框架 requests爬虫 可视化 数据分析 大数据 机器学习 大模型(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

Qwen3-TTS开源大模型实战:复古HUD界面下的AI语音创作工作流

Qwen3-TTS开源大模型实战&#xff1a;复古HUD界面下的AI语音创作工作流 1. 引言&#xff1a;当AI语音合成遇上复古游戏风 想象一下&#xff0c;你不再需要面对枯燥的音频参数调节界面&#xff0c;而是走进一个像素风的游戏世界。在这里&#xff0c;生成一段AI语音就像玩一款复…...

告别重复登录:D2RML如何革新暗黑2重制版多开体验

告别重复登录&#xff1a;D2RML如何革新暗黑2重制版多开体验 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML 作为暗黑破坏神2重制版的忠实玩家&#xff0c;你是否经历过这些令人沮丧的时刻&#xff1f;…...

新手福音:基于预置镜像,在快马平台零配置开启Python Web开发之旅

作为一个刚接触Python Web开发的新手&#xff0c;我最近在InsCode(快马)平台上体验了一把零配置搭建个人博客的过程。不得不说&#xff0c;这种基于预置镜像的开发方式&#xff0c;简直是为我们这些初学者量身定制的福音。下面我就来分享一下这次的学习心得。 为什么选择预置镜…...

Transformer 从0到1:长时依赖问题的本质——梯度消失与爆炸

# Transformer 从0到1&#xff1a;长时依赖问题的本质——梯度消失与爆炸## 引言&#xff1a;序列模型的困境在自然语言处理、语音识别、时间序列分析等领域&#xff0c;处理序列数据是核心任务。一个理想的序列模型&#xff0c;不仅需要捕捉局部的语法结构&#xff08;如主语和…...

STM32 SRAM调试实战与优化技巧

1. STM32 SRAM调试实战指南在嵌入式开发中&#xff0c;我们通常将程序烧录到Flash中运行。但当你需要快速验证代码、调试硬件问题或进行临时测试时&#xff0c;使用STM32内部SRAM运行程序会是个高效的选择。我最近在调试一个LED控制程序时&#xff0c;就采用了SRAM运行的方式&a…...

Virtualbox “Kernel driver not installed (rc=-1908)”问题全面解析与修复指南

1. 遇到Virtualbox "Kernel driver not installed (rc-1908)"错误怎么办&#xff1f; 最近在Ubuntu系统上更新后&#xff0c;突然发现Virtualbox无法正常启动虚拟机了&#xff0c;屏幕上赫然显示着"Kernel driver not installed (rc-1908)"的错误提示。作为…...