Leetcode——556. 下一個更大元素 III

題目鏈接:556. 下一個更大元素 III

(由于圖片上傳失敗,不貼原題目了,有需要可以前往力扣查看)

本文給出該題的單調棧做法,同時繞過所有庫函數,所有邏輯均自行實現。

本題的思路就是從右向左按位遍歷,找到第一次下降時的下標,同時將數字對于下標填入棧中。這樣,當找到要更改的下標時,開始循環,找到最后一個比要被替換的數字大的值,這就是單調棧。互換二者位置。我們假設第一次下降時下標為 idx , 被替換下標為 change, 由之前邏輯可以知道,[idx + 1, change - 1]的數字均大于idx的數字,[change + 1, size - 1]位置的數均小于idx的數字,最后我們只需要將[idx + 1, size - 1]位置的所有數字調換順序就保證為下一個更大的數字,而不必使用排序。

而以上所需的交換swap,逆序reverse,還有離散化數字和重組數字,代碼都給予實現。

class Solution {
public:int nextGreaterElement(int n) {int cnt = 0;    // 位數vector<int> nums;   // 離散化for(int i = n; i > 0; i /= 10){nums.push_back(i % 10);cnt++;}reverse(0, cnt - 1, nums);    // 更直觀stack<int> stk;stk.push(cnt - 1);for(int i = cnt - 2; i >= 0; i--){if(nums[i] < nums[i + 1]){// 找到第一次下降的下標 iint change;        // 被更換位置while(!stk.empty() && nums[i] < nums[stk.top()]){change = stk.top();stk.pop();}swap(i, change, nums);reverse(i + 1, cnt - 1, nums);    // 注意下標long long ans = funcToll(nums);if(ans > INT_MAX){return -1;}else{return (int)ans;}}stk.push(i);    // 別忘在沒找到前將下標入棧備用}return -1;}// 逆序void reverse(int i, int j, vector<int>& nums){if(i < 0 || j >= nums.size() || i >= j) { return; }while(i < j){swap(i++, j--, nums);}}// 交換void swap(int i, int j, vector<int>& nums){if(i < 0 || i >= nums.size() || j < 0 || j >= nums.size()) { return; }int t = nums[i];nums[i] = nums[j];nums[j] = t;}// 重組數字long long funcToll(vector<int>& nums){long long ans = 0;for(int x : nums){ans = ans * 10 + x;}return ans;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918213.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918213.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918213.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Idea打包可執行jar,MANIFEST.MF文件沒有Main-Class屬性:找不到或無法加載主類

背景&#xff1a;IDEA傳統方法【Project structure】-->artifact---->build的模式&#xff0c;打包【Maven】項目&#xff0c;發現生成的可執行jar包&#xff0c;顯示【找不到或無法加載主類】。但是用【Maven】的Assembly可以正常生成。期望用傳統方法實現打jar包方法&a…

檢索增強生成:RAG(Retrieval Augmented Generation)

什么是 RAG&#xff1f;為什么使用 RAG&#xff1f;LLM 微調 和 RAG&#xff1f;實戰什么是 RAG&#xff1f; RAG 在論文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中被引入&#xff0c;原論文是這樣描述的&#xff1a; 探索了一種 通用的 檢索增…

Android 設置/修改系統NTP服務地址

Android 手機的 NTP 時間同步&#xff08;網絡時間同步&#xff09;主要依賴網絡&#xff0c;但系統時間來源還包括其他方式&#xff0c;整體時間校準機制是多種來源的結合。具體可分為以下幾類&#xff1a; 1. 網絡 NTP 同步&#xff08;最主要方式&#xff09; 這是 Androi…

Ubuntu22.04 安裝vitis2023.2 卡在“Generating installed device list“.

關于這個問題&#xff0c;xilinx有官方說明&#xff0c;鏈接 原因&#xff1a;問題是 Ubuntu 20.04 缺少 libtinfo.so.5 庫。 解決辦法&#xff1a; sudo apt-get install libtinfo5

前端全棧修煉手冊:從 Vue3 到工程化的進階之路

本文將全方位覆蓋前端開發的核心知識&#xff0c;從 Vue3 框架的基礎語法到復雜的工程化實踐&#xff0c;從包管理工具的使用到模塊規范的深入理解&#xff0c;帶你踏上從入門到精通的進階之路。 Vue3 框架&#xff1a;新時代前端開發的基石 Vue3 核心語法探秘 Vue3 作為目前…

Jetpack Compose 常用控件

Jetpack Compose 常用控件一、基礎展示控件&#xff1a;呈現靜態內容二、交互控件&#xff1a;響應用戶操作三、列表與網格控件&#xff1a;展示大量數據四、導航與標簽控件&#xff1a;組織頁面結構五、反饋控件&#xff1a;提示與加載狀態六、布局控件&#xff1a;組織 UI 結…

Android適配最新SplashScreen方案:讓啟動頁不再“翻車“

Android適配最新SplashScreen方案:讓啟動頁不再"翻車" 各位開發者大佬們,最近是不是又被Android的SplashScreen適配搞得焦頭爛額?別慌,今天咱們就來聊聊這個讓人又愛又恨的啟動頁適配方案,保證讓你笑出腹肌的同時,還能把技術要點牢牢掌握![6][7][9][10] 一、…

【自動駕駛】《Sparse4Dv3》代碼學習筆記

這里時間比較有限&#xff0c;優先看Sparse4Dv3方法里面相對以前改動的地方。 0.參考 代碼v1/v2/v3:https://github.com/HorizonRobotics/Sparse4D 跑起來&#xff1a;https://github.com/HorizonRobotics/Sparse4D/blob/v3.0/docs/quick_start.md 1.方法 &#xff08;1&a…

「ECG信號處理——(22)Pan-Tompkins Findpeak 閾值檢測 差分閾值算法——三種R波檢測算法對比分析」2025年8月8日

目錄 1、引言 2、算法原理 &#xff08;1&#xff09;Pan-Tompkins 算法&#xff08;方法1&#xff09; &#xff08;2&#xff09;Findpeak 閾值檢測算法&#xff08;方法2&#xff09; &#xff08;3&#xff09;差分閾值算法&#xff08;方法3&#xff09; 3、算法性能…

Qdrant Filtering:must / should / must_not 全解析(含 Python 實操)

在向量搜索中&#xff0c;過濾&#xff08;Filtering&#xff09; 是保證結果精準性和業務契合度的關鍵手段。Qdrant 的過濾機制不僅能在向量相似度檢索的基礎上疊加結構化條件&#xff0c;還提供了靈活的布爾邏輯組合&#xff0c;讓我們可以像寫數據庫查詢一樣&#xff0c;精準…

五、RuoYi-Cloud-Plus 前端項目部署以及如何改后端請求地址。

1.前情描述 前面的文章我們介紹了RuoYi-Cloud-Plus的nocos的配置內容&#xff0c;已經啟動其他服務要注意什么東西。 專欄內容在這&#xff0c;感興趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.前端項目部署。 官網地址&#xff1a;plus…

工作量評估

工作量評估 API 工作量評估&#xff1a; 得分 入參個數 * 0.2 業務規則 * 0.5 改動的庫表個數 * 0.3 得分&#xff08;1-2&#xff09;&#xff1a;簡單API-5人天 得分&#xff08;3-8&#xff09;&#xff1a;中等API-8人天 得分&#xff08;8-15&#xff09;&#xff1a;復…

籃球運動(動態規劃)

題目描述小明建造了一個籃球場&#xff0c;他請來了2行n列的人&#xff0c;想讓他們進行比賽。每一個人都有一個能力值&#xff0c;第一行分別為h11&#xff0c;h12&#xff0c;…&#xff0c;h1n&#xff0c;第二行為h21&#xff0c;h22&#xff0c;…&#xff0c;h2n。現在小…

區塊鏈與大數據分析技術深度解析

目錄 區塊鏈與大數據分析技術深度解析 1. 引言:當區塊鏈遇見大數據 2. 區塊鏈數據特性 2.1 數據結構差異 2.2 區塊鏈數據層級 3. 數據獲取技術 3.1 節點直連方案 3.2 鏈上數據湖架構 4. 數據分析關鍵技術 4.1 交易圖譜分析 4.2 地址聚類算法 5. 鏈上分析應用場景 5.1 反洗錢(A…

網絡基礎——網絡層級

OSI七層模型OSI七層模型名稱功能協議應用層直接為用戶應用程序&#xff08;如瀏覽器、郵件客戶端&#xff09;提供網絡服務接口。HTTP/HTTPS&#xff08;網頁瀏覽&#xff09;FTP&#xff08;文件傳輸&#xff09;SMTP/POP3&#xff08;郵件&#xff09;DNS&#xff08;域名解析…

【Redis】hash哈希,List列表

目錄 一. hash哈希 1.1.常用命令 1.1.1.HSET 1.1.2.HGET 1.1.3.HEXISTS 1.1.4.HDEL 1.1.5.HKEYS 1.1.6.HVALS 1.1.7.HGETALL 1.1.8.HMGET 1.1.9.HLEN 1.1.10.HSETNX 1.1.11.HINCRBY 1.1.12.HINCRBYFLOAT 1.2. 內部編碼 1.3. 使用場景 1.4…

MySQL相關概念和易錯知識點(4)(分組查詢、連接查詢、合并查詢、子查詢)

目錄1.分組查詢&#xff08;1&#xff09;聚合函數&#xff08;2&#xff09;group by子句&#xff08;3&#xff09;having2.連接查詢&#xff08;1&#xff09;內連接&#xff08;笛卡爾積&#xff09;&#xff08;2&#xff09;外連接&#xff08;3&#xff09;內外連接的區…

【Python 高頻 API 速學 ①】

一、為什么先學它們&#xff1f; 在真實代碼里&#xff0c;90 % 的 bug 都源于「拿到的是 A 類型&#xff0c;卻當成 B 類型用」。 把「不確定」變成「確定」——這就是類型轉換三兄弟的核心價值。二、三兄弟速覽函數一句話定位常見輸入失敗會怎樣int(x)把 x 變成整數‘42’, 3…

FFmpeg 視頻旋轉信息處理:3.4 vs 7.0.2

1. 概述 FFmpeg 在處理視頻旋轉信息方面經歷了重要的架構變化。本文檔詳細對比了 FFmpeg 3.4 和 7.0.2 在封裝&#xff08;muxing&#xff09;和解封裝&#xff08;demuxing&#xff09;視頻旋轉信息時的差異&#xff0c;并提供兼容性解決方案。文檔內容由Claude Sonnet 4輔助撰…

《Resolving tissue complexity by multimodal spatial omics modeling with MISO》

概念多模態空間組學&#xff1a;簡單來說&#xff0c;就是同時研究生物組織里的多種分子信息&#xff08;比如基因表達、蛋白質、代謝物、表觀遺傳標記等&#xff09;&#xff0c;而且這些信息還帶有空間位置。MISO&#xff08;MultI-modal Spatial Omics&#xff09;是這篇論文…