Leetcode 第 126 场双周赛题解

Leetcode 第 126 场双周赛题解

  • Leetcode 第 126 场双周赛题解
    • 题目1:3079. 求出加密整数的和
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3080. 执行操作标记数组中的元素
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3081. 替换字符串中的问号使分数最小
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3082. 求出所有子序列的能量和
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 126 场双周赛题解

题目1:3079. 求出加密整数的和

思路

代码

/** @lc app=leetcode.cn id=3079 lang=cpp** [3079] 求出加密整数的和*/// @lc code=start
class Solution
{
public:int sumOfEncryptedInt(vector<int> &nums){int sum = 0;for (int &num : nums)sum += encrypt(num);return sum;}// 加密函数int encrypt(int x){string s = to_string(x);int maxDigit = 0;for (char &c : s)maxDigit = max(maxDigit, c - '0');int res = 0;for (int i = 0; i < s.length(); i++){res *= 10;res += maxDigit;}return res;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n*m),其中 n 是数组 nums 的长度,m 是每个元素的位数。

空间复杂度:O(1)。

题目2:3080. 执行操作标记数组中的元素

思路

由于要按照元素从小到大标记,但又不能直接对数组排序(因为有对特定 index 的标记),我们可以创建一个 ids 数组,其中 ids[i]=i,然后对该数组按照 nums[ids[i]] 从小到大排序。注意要使用稳定排序,因为相同元素值的下标需要按照下标从小到大排。也可以使用不稳定排序(如快速排序),但要对于相同元素值按照下标从小到大排序。

设 nums 的元素和为 s。对于每个询问,我们先将 s 减少 nums[index],然后将 nums[index] 置为 0,就相当于标记了这个数(因为题目保证数组元素都是正数)。然后依照 ids 找 k 个最小的没有被标记的数,将其标记,标记的同时维护 s。

代码

/** @lc app=leetcode.cn id=3080 lang=cpp** [3080] 执行操作标记数组中的元素*/// @lc code=start
class Solution
{
public:vector<long long>unmarkedSumArray(vector<int> &nums, vector<vector<int>> &queries){int n = nums.size();long long s = accumulate(nums.begin(), nums.end(), 0LL);vector<int> ids(n);iota(ids.begin(), ids.end(), 0);// ranges::stable_sort(ids, [&](int i, int j) { return nums[i] < nums[j]; });sort(ids.begin(), ids.end(), [&](const int i, const int j){ if (nums[i] != nums[j]) return nums[i] < nums[j];else return i < j; });vector<long long> ans;int idx = 0;for (vector<int> &query : queries){int index = query[0], k = query[1];s -= nums[index];nums[index] = 0; // 标记for (; idx < n && k; idx++){index = ids[idx];if (nums[index] > 0) // 未被标记{s -= nums[index];nums[index] = 0; // 标记k--;}}ans.push_back(s);}return ans;}
};
// @lc code=end

复杂度分析

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

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

题目3:3081. 替换字符串中的问号使分数最小

思路

在这里插入图片描述

算法:

  1. 统计字母出现次数 freq,和字母组成 pair 加到一个最小堆中。
  2. 设问号出现了 cnt 次。循环 cnt 次,每次取出堆顶字母(它是目前出现次数最小的)加入一个字符串 tmp 中,然后把该字母的出现次数加一,重新入堆。
  3. 把 tmp 从小到大排序,因为题目要求字典序最小。
  4. 遍历 s 中的问号,按顺序填入 tmp 中的字母。

代码

/** @lc app=leetcode.cn id=3081 lang=cpp** [3081] 替换字符串中的问号使分数最小*/// @lc code=start// 贪心 + 优先队列class Solution
{
public:string minimizeStringValue(string s){vector<int> freq(26, 0);for (char &c : s)if (c != '?')freq[c - 'a']++;priority_queue<pair<int, char>, vector<pair<int, char>>, greater<>> pq;for (int i = 0; i < 26; i++)pq.emplace(freq[i], i + 'a');int cnt = count(s.begin(), s.end(), '?');string tmp;for (int i = 0; i < cnt; i++){auto [f, ch] = pq.top();pq.pop();tmp.push_back(ch);pq.emplace(f + 1, ch);}// 排序,因为要求字典序最小sort(tmp.begin(), tmp.end());for (int i = 0, j = 0; i < s.length(); i++)if (s[i] == '?')s[i] = tmp[j++];return s;}
};
// @lc code=end

复杂度分析

在这里插入图片描述

题目4:3082. 求出所有子序列的能量和

思路

在这里插入图片描述

二维 01 背包:

在这里插入图片描述

代码

/** @lc app=leetcode.cn id=3082 lang=cpp** [3082] 求出所有子序列的能量和*/// @lc code=start
class Solution
{
private:const int mod = 1e9 + 7;public:int sumOfPower(vector<int> &nums, int k){int n = nums.size();// dp[i][j][c]: 前 i 个物品,所选物品体积和是 j,选了 c 个物品的方案数int dp[n + 1][k + 1][n + 1];// 初始化memset(dp, 0, sizeof(dp));for (int i = 0; i <= n; i++)dp[i][0][0] = 1;// 状态转移for (int i = 0; i < n; i++){for (int j = k; j >= 0; j--){for (int c = n; c > 0; c--){// 二维0/1背包dp[i + 1][j][c] = dp[i][j][c]; // 不选if (j >= nums[i]){// 选dp[i + 1][j][c] = (dp[i + 1][j][c] + dp[i][j - nums[i]][c - 1]) % mod;}}}}// 贡献法int ans = 0;long p = 1;for (int c = n; c >= 0; c--){ans = (ans + dp[n][k][c] * p % mod) % mod;p = (p * 2) % mod;}return ans;}
};
// @lc code=end

复杂度分析

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

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

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

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

相关文章

[LeetCode]516. 最长回文子序列[记忆化搜索解法详解]

最长回文子序列 LeetCode 原题链接 题目 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a…

Day46:WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

目录 数据猜解-库表列数据&字典 权限操作-文件&命令&交互式 提交方法-POST&HEAD&JSON 绕过模块-Tamper脚本-使用&开发 分析拓展-代理&调试&指纹&风险&等级 知识点&#xff1a; 1、注入工具-SQLMAP-常规猜解&字典配置 2、注入…

【有芯职说】数字芯片BES工程师

一、 数字芯片BES工程师简介 今天来聊聊数字芯片BES工程师&#xff0c;其中BES是Back End Support的缩写&#xff0c;就是后端支持的意思。其实这个岗位是数字IC前端设计和数字IC后端设计之间的一座桥&#xff0c;完成从寄存器传输级设计到具体工艺的mapping和实现。这个岗位在…

牛客小白月赛89(A,B,C,D,E,F)

比赛链接 官方视频讲解&#xff08;个人觉得讲的还是不错的&#xff09; 这把BC偏难&#xff0c;差点就不想做了&#xff0c;对小白杀伤力比较大。后面的题还算正常点。 A 伊甸之花 思路&#xff1a; 发现如果这个序列中最大值不为 k k k&#xff0c;我们可以把序列所有数…

Linux——信号的保存与处理

目录 前言 一、信号的常见概念 1.信号递达 2.信号未决 3.信号阻塞 二、Linux中的递达未决阻塞 三、信号集 四、信号集的处理 1.sig相关函数 2.sigprocmask()函数 3.sigpending()函数 五、信号的处理时机 六、信号处理函数 前言 在之前&#xff0c;我们学习了信号…

学习JavaEE的日子 Day32 线程池

Day32 线程池 1.引入 一个线程完成一项任务所需时间为&#xff1a; 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间&#xff0c;从而提高程序的性能。项目中可以把Time…

如何使用Windows电脑部署Lychee私有图床网站并实现无公网IP远程管理本地图片

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-MSVdVLkQMnY9Y2HW {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

NB-IOT——浅谈NB-IOT及模块测试

浅谈NB-IOT及模块基本使用测试 介绍什么是NB-IOT&#xff1f;NB-IOT的特点 使用准备基本使用 总结 介绍 什么是NB-IOT&#xff1f; NB-IoT&#xff0c;即窄带物联网&#xff08;Narrowband Internet of Things&#xff09;&#xff0c;是一种低功耗广域物联网&#xff08;LPW…

MongoDB Atlas维护指南:常见类型、注意事项与窗口设置

为了给Atlas用户更好的产品体验&#xff0c;MongoDB产品团队会进行定期维护。 本文将会介绍&#xff1a; 常见维护项目种类及频率&#xff0c;注意事项维护期间的影响及建议维护窗口设置说明维护告警设置和邮件通知范例 维护窗口常见项目 定期SSL证书轮换软件升级&#xff…

Golang生成UUID

安装依赖 go get -u github.com/google/uuid示例 函数签名func NewV7() ( UUID ,错误) uid : uuid.NewV7()

Java八股文(数据结构)

Java八股文の数据结构 数据结构 数据结构 请解释以下数据结构的概念&#xff1a;链表、栈、队列和树。 链表是一种线性数据结构&#xff0c;由节点组成&#xff0c;每个节点包含了指向下一个节点的指针&#xff1b; 栈是一种后进先出&#xff08;LIFO&#xff09;的数据结构&a…

Mac添加和关闭开机应用

文章目录 mac添加和关闭开机应用添加开机应用删除/查看 mac添加和关闭开机应用 添加开机应用 删除/查看 打开&#xff1a;系统设置–》通用–》登录项–》查看登录时打开列表 选中打开项目&#xff0c;点击“-”符号

华为防火墙配置指引超详细(包含安全配置部分)以USG6320为例

华为防火墙USG6320 华为防火墙USG6320是一款高性能、高可靠的下一代防火墙,适用于中小型企业、分支机构等场景。该防火墙支持多种安全功能,可以有效抵御网络攻击,保护网络安全。 目录 华为防火墙USG6320 1. 初始配置 2. 安全策略配置 3. 防火墙功能配置 4. 高可用性配…

论文笔记:分层问题-图像共注意力问答

整理了2017 Hierarchical Question-Image Co-Attention for Visual Question Answering&#xff09;论文的阅读笔记 背景模型问题定义模型结构平行共注意力交替共注意力 实验可视化 背景 视觉问答(VQA)的注意力模型在此之前已经有了很多工作&#xff0c;这种模型生成了突出显示…

词令关键词口令直达工具:打开「词令」输入关键词直达口令怎么使用?

词令是一款关键词口令直达工具&#xff1b;使用词令关键词口令直达工具&#xff0c;输入指定的词令关键词直达口令&#xff0c;搜索直达该词令关联的网站、页面、程序、应用、服务或功能等等&#xff0c;实现一键直达目标&#xff0c;避免繁琐的查找点击行为&#xff0c;提高用…

axios发送get请求但参数中有数组导致请求路径多出了“[]“的处理办法

一、情况 使用axios发送get请求携带了数组参数时&#xff0c;请求路径中就会多出[]字符&#xff0c;而在后端也会报错 二、解决办法 1、安装qs 当前项目的命令行中安装 npm install qs2、引入qs库(使用qs库来将参数对象转换为字符串) // 全局 import qs from qs Vue.proto…

事件穿透效果

讲述一下事件穿透的需求&#xff0c;大家可以根据实际情况来考虑是否采用这种方式来制作页面&#xff0c;&#xff08;项目中遇到了底部是地图&#xff0c;两侧面板&#xff0c;但是UI在设计的时候为了好看&#xff0c;会有很大的遮罩阴影部分&#xff0c;如果按照时间制作会导…

[BT]BUUCTF刷题第10天(3.28)

第10天&#xff08;共3题&#xff09; Basic BUU SQL COURSE 1 打开网站看到右上角有个登录界面&#xff0c;怀疑是SQL注入 但是多次尝试都无果 通过看题解知道了还有一个隐藏网页&#xff08;content_detail.php&#xff09; 随便点一个测试新闻进去后点F12看网络&#xf…

C#实现身份证格式验证(自建异常实现提醒)

基本信息 中国居民身份证的格式包括18位数字&#xff0c;这些数字分别代表不同的信息&#xff1a; 第1、2位数字表示省份代码。 第3、4位数字表示城市代码。 第5、6位数字表示区县代码。 第7至14位数字表示出生年、月、日&#xff08;其中7、8、9、10位是年&#xff0c;11、12…

如何使用群晖WebDAV实现固定公网地址同步Zotero文献管理器

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…