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,一经查实,立即删除!

相关文章

华为OD 数组去重和排序(100分)【java】A卷+B卷

华为OD统一考试A卷B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目&#xff0c;A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载&#xff0c;请点击以下链接进入&#xff…

华为云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;保序回归可以帮助保持这种顺序关系。例如&…

计算机加减乘除的本质

只应用位运算实现加减乘除是程序员的基本修养&#xff0c;这里应用通俗易懂的python实现加减乘除&#xff0c;其他语言同理。 应对python无限制扩展位数的方法 # 限制变量为32位 def int32(value):return -(value & 0x80000000) | (value & 0x7FFFFFFF)加法,本位进位…

机器学习 | 基于随机森林的可解释性机器学习

可解释性机器学习在当今数据驱动的决策系统中扮演着重要的角色。随着人工智能技术的快速发展,越来越多的应用场景需要了解和解释模型的决策过程,以提高透明度、可信度和可接受性。乳腺癌作为一种常见的恶性肿瘤,早期诊断对于治疗和预后具有重要意义。 然而,乳腺癌早期诊断…

认识系统服务

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

HttpServlet源码分析及HttpServletRequest接口

2023.10.20 HttpServlet HttpServlet类是专门为HTTP协议准备的。比GenericServlet更加适合HTTP协议下的开发。 http包下都有哪些类和接口呢&#xff1f;&#xff08;jakarta.servlet.http.*&#xff09; jakarta.servlet.http.HttpServlet &#xff08;HTTP协议专用的Servlet…

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

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

【SA8295P 源码分析 (四)】35 - QNX侧 Marvell 88Q5152 Phy_Switch 导通实录(硬核)

【SA8295P 源码分析】35 - QNX侧 Marvell 88Q5152 Phy_Switch 导通实录(硬核) 一、硬件原理分析二、88Q5152 芯片读写时序分析2.1 Clause 22 读、写寄存器配置(配置 Port 5 采用C22条款)2.1.1 88Q5152 P5 端口配置2.2 Clause 45 读寄存器时序(配置 Port 1、Port 2 采用C45…

软考系列(系统架构师)- 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;吧运行目录…

字符串Hash学习笔记

哈希算法 哈希算法是通过一个哈希函数 H H H&#xff0c;将一种数据&#xff08;包括字符串、较大的数等&#xff09;转化为能够用变量表示或是直接就可作为数组下标的数。 哈希值 通过哈希函数转化的得到的数值。可以通过哈希值实现快速查找和匹配。 简介 寻找长度为 n n…

【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…