第 121 场 LeetCode 双周赛题解

A 大于等于顺序前缀和的最小缺失整数

在这里插入图片描述

模拟:先求最长顺序前缀的和 s s s ,然后从 s s s 开始找没有出现在 n u m s nums nums 中的最小整数

class Solution {
public:int missingInteger(vector<int> &nums) {unordered_set<int> vis(nums.begin(), nums.end());int s = nums[0];int i = 0;while (i + 1 < nums.size() && nums[i + 1] == nums[i] + 1)s += nums[++i];while (vis.count(s))s++;return s;}
};

B 使数组异或和等于 K 的最少操作次数

在这里插入图片描述

枚举:求出 n u m s nums nums 各元素异或和 t o t tot tot ,对 t o t tot tot k k k 的二进制表示按位枚举,若两数某一位不同,则需要增加一次操作数

class Solution {
public:int minOperations(vector<int> &nums, int k) {int tot = 0;for (auto x: nums)tot ^= x;int res = 0;for (int i = 0; i < 32; i++)if ((tot >> i & 1) != (k >> i & 1))res++;return res;}
};

C 使 X 和 Y 相等的最少操作次数

在这里插入图片描述
在这里插入图片描述

bfs:相当于求从 x x x 出发到 y y y 的最短路,搜素过程中用集合记录已经到达过的数

class Solution {
public:int minimumOperationsToMakeEqual(int x, int y) {unordered_set<int> vis;queue<pair<int, int>> q;vis.insert(x);q.emplace(x, 0);int res;while (!q.empty()) {auto [v, cnt] = q.front();q.pop();if (v == y) {res = cnt;break;}if (v > y && v % 11 == 0 && !vis.count(v / 11)) {vis.insert(v / 11);q.emplace(v / 11, cnt + 1);}if (v > y && v % 5 == 0 && !vis.count(v / 5)) {vis.insert(v / 5);q.emplace(v / 5, cnt + 1);}if (!vis.count(v + 1)) {vis.insert(v + 1);q.emplace(v + 1, cnt + 1);}if (v > y && !vis.count(v - 1)) {vis.insert(v - 1);q.emplace(v - 1, cnt + 1);}}return res;}
};

D 统计强大整数的数目

在这里插入图片描述

数位dp + 记忆化搜素:定义 c m p ( x , m x , s u f ) cmp(x,mx,suf) cmp(x,mx,suf) 为不超过 x x x 且数中各数位不超过 m x mx mx 且数的末尾部分是 s u f suf suf 的数的数目,则题目答案为 c m p ( f i n i s h , l i m i t , s ) − c m p ( s t a r t − 1 , l i m i t , s ) cmp(finish, limit, s) - cmp(start - 1, limit, s) cmp(finish,limit,s)cmp(start1,limit,s) 。在 c m p cmp cmp 中定义 p [ l o c ] [ v a l ] [ e q ] p[loc][val][eq] p[loc][val][eq] 为:当前枚举下标为 l o c loc loc 且 之前位置对应的数位是否有数字(0:无,1:有)且 之前位置对应的数位的数字形成的前缀是否和 x x x 对应的前缀相等(0:不等,1:相等),这种情况下末尾部分是 s u f suf suf 的数的数目,通过记忆化搜素枚举状态转移的过程,最终 c m p ( x , m x , s u f ) cmp(x,mx,suf) cmp(x,mx,suf) 即为 p [ 0 ] [ 0 ] [ 1 ] p[0][0][1] p[0][0][1]

class Solution {
public:using ll = long long;long long numberOfPowerfulInt(long long start, long long finish, int limit, string s) {return cmp(finish, limit, s) - cmp(start - 1, limit, s);}ll cmp(ll x, int mx, string &suf) {if (x < stol(suf))return 0;string s0 = to_string(x);int n = s0.size();int m = suf.size();ll suf0 = stol(s0.substr(n - m, m));//x与suf相同长度的末尾部分ll vsuf = stol(suf);ll p[n][2][2];memset(p, -1, sizeof(p));function<ll(int, int, int)> get = [&](int loc, int val, int eq) {//记忆化搜素if (p[loc][val][eq] != -1)return p[loc][val][eq];if (n - loc == m) {//loc已经为suf的第一位if (suf0 >= vsuf || eq == 0)p[loc][val][eq] = 1;else //末尾若是suf则会大于x,所以不存在这样的数p[loc][val][eq] = 0;return p[loc][val][eq];}p[loc][val][eq] = 0;if (val) {//之前位置对应的数位有数字if (eq) {//之前位置对应的数位的数字形成的前缀和x对应的前缀相等for (int i = 0; i <= s0[loc] - '0' && i <= mx; i++)p[loc][val][eq] += get(loc + 1, 1, i == s0[loc] - '0' ? 1 : 0);} else {//之前位置对应的数位的数字形成的前缀和x对应的前缀不等for (int i = 0; i <= mx; i++)p[loc][val][eq] += get(loc + 1, 1, 0);}} else {//之前位置对应的数位无数字if (eq) {//之前位置对应的数位的数字形成的前缀和x对应的前缀相等p[loc][val][eq] += get(loc + 1, 0, 0);//当前数位没有数字for (int i = 1; i <= s0[loc] - '0' && i <= mx; i++)p[loc][val][eq] += get(loc + 1, 1, i == s0[loc] - '0' ? 1 : 0);} else {//之前位置对应的数位的数字形成的前缀和x对应的前缀不等p[loc][val][eq] += get(loc + 1, 0, 0);//当前数位没有数字for (int i = 1; i <= mx; i++)p[loc][val][eq] += get(loc + 1, 1, 0);}}return p[loc][val][eq];};return get(0, 0, 1);}
};

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

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

相关文章

[C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh

【官方框架地址】 https://github.com/takuya-takeuchi/DlibDotNet 【算法介绍】 DlibDotNet是一个开源的.NET库&#xff0c;用于实现机器学习和计算机视觉应用。它基于C库dlib&#xff0c;通过C/CLI封装了dlib的所有功能&#xff0c;为.NET开发者提供了简单易用的API。以下是…

蓝桥杯练习题(一)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;一&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

【计算机毕业设计】SSM健身房管理系统

项目介绍 本项目为后台管理系统&#xff0c;主要分为管理员与用户两种角色&#xff1b; 登录页面,管理员首页,会员增删改查,教练增删改查,运动器材管理等功能。 用户角色包含以下功能&#xff1a; 用户登录页面,用户首页,选择课程,选择教练等功能。 环境需要 1.运行环境&a…

LabVIEW在指针式仪表读数中的应用

在LabVIEW环境中&#xff0c;为实现指针式仪表的自动读数&#xff0c;首先进行图像预处理&#xff0c;包括图像缩放、灰度化和二值化&#xff0c;以提高处理速度和减少噪声干扰。利用LabVIEW的图像处理功能&#xff0c;灰度化和二值化操作简化了图像的色彩信息&#xff0c;便于…

Linux Shell数学运算与条件测试

一、Shell数学运算 1.Shell常见的算术运算符号 序号算术运算符号意义1、-、*、/、%加、减、乘、除、取余2**幂运算3、–自增或自减4&&、||、&#xff01;与、或、非5、!相等、不相等&#xff0c;也可写成6、、-、*、/、%赋值运算符&#xff0c;a1相等于aa1 2.Shell常…

听GPT 讲Rust源代码--compiler(25)

File: rust/compiler/rustc_target/src/spec/mod.rs 在Rust的源代码中&#xff0c;rust/compiler/rustc_target/src/spec/mod.rs文件的作用是定义和实现有关目标平台的规范。 SanitizerSet是一个结构体&#xff0c;用于表示目标平台上存在的sanitizer集合。 TargetWarnings是一…

学习笔记——C++运算符之赋值运算符

上次我们说到C的运算符共有四种&#xff0c;分别是算术运算符&#xff0c;赋值运算符&#xff0c;比较运算符和逻辑运算符 &#xff0c;下面介绍赋值运算符&#xff0c;赋值运算符主要的种类及作用如下表所示。 #include<bits/stdc.h> using namespace std; int main(){…

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于正负1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 笔者的一些话(写在最前面)&#xff1a; 这是一篇小文&#xff0c;是我写的关于求解矩阵行列式的一篇文章中的一部分。之所以把这一段专门提溜出来&#xff0c;是因为这一段相对于原文是可以完全独立的&#xff0c;也是因为我…

nodejs01

nodejs作用 Node.js 是一个免费的、开源的、跨平台的 JavaScript 运行时环境&#xff0c;允许开发人员在浏览器之外编写命令行工具和服务器端脚本. 是javascript的一个运行环境&#xff0c;&#xff0c;&#xff0c; nodejs stream 是前端工程化的基础 nodejs可以作为中间层&…

Nginx快速入门:Nginx实现高可用|结合keepalived实现主备节点(九)

0. 引言 在生产中我们要尽可能避免单点故障&#xff0c;nginx也不例外&#xff0c;因此搭建主备节点必不可少&#xff0c;今天我们来学习下如何利用keepalived实现主备 1. keepalived简介 keepalived 是一个LINUX系统中开源的负载均衡和故障转移软件&#xff0c;它主要用于高…

Qt pro文件

1. 项目通常结构 2.pri文件 pri文件可定义通用的宏&#xff0c;例如创建一个COMMON.pri文件内容为 COMMON_PATH D:\MyData 然后其它pri或者pro文件如APPTemplate.pro文件中通过添加include(Common.pri) &#xff0c;QtCreator就会自动在项目结构树里面创建对应的节点 3.变量…

thinkphp6入门(15)-- 模型动态构建查询条件

背景 我使用thinkphp6的模型写数据库查询&#xff0c;有多个where条件&#xff0c;但是不确定是否需要添加某个where条件&#xff0c;怎么才能动态得生成查询 链式查询 在ThinkPHP 6中&#xff0c;可以使用链式查询方法来动态地构建查询条件。可以根据参数的值来决定是否添加…