Leetcode 第 361 场周赛题解

Leetcode 第 361 场周赛题解

  • Leetcode 第 361 场周赛题解
    • 题目1:2843. 统计对称整数的数目
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:生成特殊数字的最少操作
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:统计趣味子数组的数目
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:边权重均等查询

Leetcode 第 361 场周赛题解

题目1:2843. 统计对称整数的数目

思路

枚举。

代码

class Solution
{
public:int countSymmetricIntegers(int low, int high){int count = 0;for (int num = low; num <= high; num++)if (check(num))count++;return count;}// 辅函数 - 判断 x 是不是一个对称整数bool check(int x){vector<int> digits;while (x){digits.push_back(x % 10);x /= 10;}if (digits.size() % 2 == 1)return false;int sum = 0;for (int i = 0; i < digits.size() / 2; i++)sum += digits[i];for (int i = digits.size() / 2; i < digits.size(); i++)sum -= digits[i];return sum == 0;}
};

取巧做法:将数字转化为字符串。

class Solution
{
public:int countSymmetricIntegers(int low, int high){int count = 0;for (int num = low; num <= high; num++){string s = to_string(num);if (s.size() % 2 == 0 && accumulate(s.begin(), s.begin() + s.size() / 2, 0) == accumulate(s.begin() + s.size() / 2, s.end(), 0))count++;}return count;}
};

复杂度分析

时间复杂度:O((high−low)*log(high))。

空间复杂度:O(log(high))。

题目2:生成特殊数字的最少操作

思路

贪心。

一个数能被 25 整除,有如下五种情况:

  • 这个数是 0。
  • 这个数以 00 结尾。
  • 这个数以 25 结尾。
  • 这个数以 50 结尾。
  • 这个数以 75 结尾。

设字符串的长度为 n。

我们从字符串的末尾往开头遍历,设当前数位为 digit,使用数组 count 记录数位的出现次数。

假设我们遍历到第 i 位,有 digit = num[i] - ‘0’,此时:

  • 当 count[0] = 2 时,不管 digit 是什么,我们都可以构建一个以 00 结尾的数字。第 0 位到第 i 位的数字可以保留,后面两个 0 可以保留,其他位删除,所以一共需要删除 n - (i + 3) 位数字。
  • 当 digit = 2 && count[5] > 0 时,我们都可以构建一个以 25 结尾的数字。第 0 位到第 i 位的数字可以保留,后面的 5 也可以保留,其他位删除,所以一共需要删除 n - (i + 2) 位数字。
  • 同理,当 digit = 5 && count[0] > 0 时,我们都可以构建一个以 50 结尾的数字,一共需要删除 n - (i + 2) 位数字;当 digit = 7 && count[5] > 0 时,我们都可以构建一个以 75 结尾的数字,一共需要删除 n - (i + 2) 位数字。
  • 最后别忘了 count[digit]++。

其他情况,我们都必须将字符串删到只剩 0 为止,删除次数为 n - count[0]。

代码

/** @lc app=leetcode.cn id=2844 lang=cpp** [2844] 生成特殊数字的最少操作*/// @lc code=start
class Solution
{
public:int minimumOperations(string num){int n = num.size();vector<int> count(10, 0);for (int i = n - 1; i >= 0; i--){int digit = num[i] - '0';// 以00结尾if (count[0] == 2)return n - i - 3;// 以25/50/75结尾if ((digit == 2 && count[5]) || (digit == 5 && count[0]) || (digit == 7 && count[5]))return n - i - 2;count[digit]++;}// 删到只剩0return n - count[0];}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 为字符串 num 的长度。

空间复杂度:O(n),其中 n 为字符串 num 的长度。

题目3:统计趣味子数组的数目

思路

前缀和。

对于本题,由于需要统计 cnt,我们可以把满足 nums[i] % modulo = k 的 nums[i] 视作 1,不满足则视作 0。

用数组 fun 记录上述结果。

如此转换后,算出 fun 的前缀和数组 preSum,那么题目中的 cnt 等价于 preSum[right + 1] - preSum[left]。

枚举 left 和 right,计算趣味子数组的数目,即满足 (preSum[right + 1] - preSum[left]) % modulo = k 的个数。

/** @lc app=leetcode.cn id=2845 lang=cpp** [2845] 统计趣味子数组的数目*/// @lc code=start
class Solution
{
public:long long countInterestingSubarrays(vector<int> &nums, int modulo, int k){int n = nums.size();vector<int> fun(n, 0);for (int i = 0; i < n; i++)if (nums[i] % modulo == k)fun[i] = 1;vector<int> preSum(n + 1, 0);for (int i = 1; i <= n; i++)preSum[i] = preSum[i - 1] + fun[i - 1];long long ans = 0;for (int left = 0; left < n; left++)for (int right = left; right < n; right++){int cnt = preSum[right + 1] - preSum[left];if (cnt % modulo == k)ans++;}return ans;}
};
// @lc code=end

结果超时了:

在这里插入图片描述

优化:

(preSum[right + 1] - preSum[left]) % modulo = k 等价于 preSum[left] % modulo = (preSum[right + 1] − k) % modulo。

根据上式,我们可以一边枚举 right,一边用一个哈希表统计有多少个 preSum[right + 1] % modulo,这样可以快速知道有多少个 (preSum[right + 1] − k) % modulo,也就是 preSum[left] % modulo 的个数,把个数加到答案中。

代码

/** @lc app=leetcode.cn id=2845 lang=cpp** [2845] 统计趣味子数组的数目*/// @lc code=start
class Solution
{
public:long long countInterestingSubarrays(vector<int> &nums, int modulo, int k){int n = nums.size();vector<int> fun(n, 0);for (int i = 0; i < n; i++)if (nums[i] % modulo == k)fun[i] = 1;vector<int> preSum(n + 1, 0);for (int i = 1; i <= n; i++)preSum[i] = preSum[i - 1] + fun[i - 1];long long ans = 0;unordered_map<int, int> cnt;cnt[0] = 1; // 把 preSum[0] = 0 算进去for (int right = 0; right < n; right++){ans += cnt[(preSum[right + 1] - k + modulo) % modulo];cnt[preSum[right + 1] % modulo]++;}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(n),其中 n 是数组 nums 的长度。

题目4:边权重均等查询

超出能力范围。

题解:LCA 模板(Python/Java/C++/Go)

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

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

相关文章

华为云HECS云服务器docker环境下安装nacos

华为云HECS云服务器&#xff0c;安装docker环境&#xff0c;查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 docker pull nacos/nacos-server二、宿主机创建挂载目录 执行如下命令&#xff1a; mkdir -p /usr/local/nacos/logs mkdir -p /usr/local/nacos/con…

Coreldraw2020最新64位电脑完整版本下载教程

安装之前所有的杀毒软件都要退出。无论是360&#xff0c;腾讯管家&#xff0c;或者电脑自带的安全中心&#xff0c;要不然会阻止安装。 CorelDRAW2020版win下载如下:https://wm.makeding.com/iclk/?zoneid55678 CorelDRAW2020版mac下载如下:https://wm.makeding.com/iclk/?…

大河弯弯:CSS 文档流与三大元素显示模式

文章目录 参考环境文档流概念三大显示模式 内联元素概念常见的内联元素宽高由内容决定 块级元素概念常见的块级元素宽度受容器影响&#xff0c;高度受内容影响 内联块级元素概念常见的内联块级元素折中方案 设置元素的显示模式display 属性内联元素与块级元素的切换为什么要通过…

使用Matplotlib画多y轴图

使用Matplotlib画多y轴图 代码成品图 代码 import matplotlib.pyplot as plt import mpl_toolkits.axisartist as AA from mpl_toolkits.axes_grid1 import host_subplot%matplotlib inline config {"font.family": "serif","font.size": 14,&…

保序回归与金融时序数据

保序回归在回归问题中的作用是通过拟合一个单调递增或递减的函数&#xff0c;来保持数据点的相对顺序特性。 一、保序回归的作用 主要用于以下情况&#xff1a; 1. 有序数据&#xff1a;当输入数据具有特定的顺序关系时&#xff0c;保序回归可以帮助保持这种顺序关系。例如&…

认识系统服务

daemon与service 达成某个服务&#xff08;service&#xff09;需要一个守护进程&#xff08;daemon&#xff09;在后台运行。 实现 ssh 服务&#xff0c;需要 sshd 这个守护进程实现 mysql 服务&#xff0c;需要 mysqld 这个守护进程实现 cron 服务&#xff0c;需要 crond 这…

电源模块测试用例科普:如何调整电压调整率?ATECLOUD-POWER测试系统能否测试?

电压调整率可以控制电压水平&#xff0c;确保设备正常工作&#xff0c;并且可以减少电能浪费&#xff0c;是开关电源测试的其中一个测试项目。那么要如何测试电压调整率呢?测试条件是什么呢? 什么是电压调整率? 电压调整率是指变压器某个绕组的空载电压和指定负载和功率因数…

软考系列(系统架构师)- 2019年系统架构师软考案例分析考点

试题一 软件架构&#xff08;架构风格、质量属性&#xff09; 【问题1】&#xff08;13分&#xff09; 针对用户级别与折扣规则管理功能的架构设计问题&#xff0c;李工建议采用面向对象的架构风格&#xff0c;而王工则建议采用基于规则的架构风格。请指出该系统更适合采用哪种…

三网话费余额查询的API系统 基于thinkphp6.0框架

本套系统是用thinkphp6.0框架开发的&#xff0c;PHP需大于8.2&#xff0c;系统支持用户中心在线查询和通过API接口对接发起查询&#xff0c;用户余额充值是对接usdt接口&#xff0c;源码全开源&#xff0c;支持懂技术的人二次开发~搭建教程1、源码上传后&#xff0c;吧运行目录…

【TES600】青翼科技基于XC7K325T与TMS320C6678的通用信号处理平台

板卡概述 TES600是一款基于FPGA&#xff0b;DSP协同处理架构的通用高性能实时信号处理平台&#xff0c;该平台采用1片TI的KeyStone系列多核浮点/定点DSP TMS320C6678作为主处理单元&#xff0c;采用1片Xilinx的Kintex-7系列FPGA XC7K325T作为协处理单元&#xff0c;具有1个FMC…

斜率优化dp

f i min ⁡ ( a j − j i ) f_i\min(a_j - j \times i) fi​min(aj​−ji) 考虑变成点对 ( j , a j ) (j,a_j) (j,aj​)&#xff0c;则 f i Y j − X j i f_iY_j-X_ji fi​Yj​−Xj​i 令 i k , f i b ik, f_ib ik,fi​b&#xff0c;得 b Y j − X j k bY_j-X_jk b…

甄知科技张礼军:数智化转型助企业破茧成蝶!

数智化浪潮滚滚向前&#xff0c;正席卷各行各业&#xff0c;带领企业从数字化时代跨入数智化时代。可什么是数智化&#xff1f;如何实现数智化转型&#xff1f;已经成为横亘在无数企业面前的大难题&#xff01; 事实上&#xff0c;数智化是数字化、AI和业务三个要素的交集&…

4.9 多协议标记交换MPLS

思维导图&#xff1a; 前言&#xff1a; **4.9 多协议标记交换MPLS笔记** 1. **定义与背景**&#xff1a; - MPLS (多协议标记交换) 是一种由 IETF 开发的新协议。 - “多协议”意味着 MPLS 的上层可以使用多种协议。 - 该协议综合了多家公司的技术&#xff0c;如 C…

【MySQL系列】- Select查询SQL执行过程详解

【MySQL系列】- Select查询SQL执行过程详解 文章目录 【MySQL系列】- Select查询SQL执行过程详解一、SQL查询语句的执行过程二、SQL执行过程详解2.1. 连接器2.2. 查询缓存2.3. 分析器2.4. 优化器2.5. 执行器 三、undo log 和 redo log作⽤3.1. redo log &#xff08;重做日志&a…

基于Linux的驱动开发:内核模块传参、内核到处符号表、字符设备驱动

内核模块传参 内核模块&#xff1a; int a , b; 安装内核模块时&#xff1a;insmod demo.ko a 100 b 10; 1.内核模块传参的意义 在安装内核模块时给内核模块中的变量进行数值传递&#xff0c;这样可以让我们的内核模块向上兼容更为复杂的应用程序&#xff0c;向下适配多种硬件…

2022年亚太杯APMCM数学建模大赛C题全球变暖与否全过程文档及程序

2022年亚太杯APMCM数学建模大赛 C题 全球变暖与否 原题再现&#xff1a; 加拿大的49.6C创造了地球北纬50以上地区的气温新纪录&#xff0c;一周内数百人死于高温&#xff1b;美国加利福尼亚州死亡谷是54.4C&#xff0c;这是有史以来地球上记录的最高温度&#xff1b;科威特53…

JVM内存模型概述

这里主要分为五大块&#xff0c;分别是&#xff1a;本地方法栈、方法区、java堆、程序计数器和java栈。其中重点是方法区、java堆和java栈。 下面就把各个区域的性质总结一下&#xff1a;&#xff08;说明&#xff0c;下面的只是结论&#xff0c;没有详细的对各个内存块进行详细…

运维监控Zabbix部署

目录 运维监控Zabbix部署 1. 简介 2. 安装 ​编辑 2.1 安装前准备 - Mysql 2.2 安装Zabbix Server 和 Zabbix Agent 2.2.1 安装Zabbix yum库 2.2.2 安装Zabbix Server、前端、Agent 2.2.3 初始化Mysql数据库 2.2.4 为Zabbix Server配置数据库 2.2.5 配置Zab…

AI驱动的未来:探索人工智能的无限潜力 | 开源专题 No.39

这一系列开源项目代表着多个领域的最新技术成果&#xff0c;包括深度学习、自然语言处理、计算机视觉和分布式训练。它们共同的特点是致力于教育、资源分享、开源精神、多领域应用以及性能和效率的追求&#xff0c;为广大开发者、研究者和学生提供了宝贵的工具和知识&#xff0…

AI全栈大模型工程师(九)Function Calling 的机制

文章目录 Function Calling 的机制Function Calling 示例 1:加法计算器Function Calling 实例 2:四则混合运算计算器后记Function Calling 的机制 Function Calling 示例 1:加法计算器 需求:用户输入任意可以用加法解决的问题,都能得到计算结果。 # 加载环境变量import o…