leetcode 503. 下一個更大元素 II(單調棧)

給定一個循環數組(最后一個元素的下一個元素是數組的第一個元素),輸出每個元素的下一個更大元素。數字 x 的下一個更大的元素是按數組遍歷順序,這個數字之后的第一個比它更大的數,這意味著你應該循環地搜索它的下一個更大的數。如果不存在,則輸出 -1。

示例 1:

輸入: [1,2,1]
輸出: [2,-1,2]
解釋: 第一個 1 的下一個更大的數是 2;
數字 2 找不到下一個更大的數;
第二個 1 的下一個最大的數需要循環搜索,結果也是 2。
注意: 輸入數組的長度不會超過 10000。

解題思路

維護一個單調遞增的棧,因為是從左到右進行遍歷的,所以越靠近棧頂的元素位置越接近當前元素,棧頂到棧底的單調遞增的,所以當只需要不斷出棧直到遇到比當前元素大的就是當前位置的結果,并且將當前元素進棧。

代碼

class Solution {public int[] nextGreaterElements(int[] nums) {int n=nums.length;Stack<Integer> stack=new Stack<>();int[] ints = new int[n];Arrays.fill(ints,-1);boolean[] booleans = new boolean[n];for (int i = n-1; i >=0; i--) {if(booleans[i]) continue;while (!stack.isEmpty()&&nums[i]>=stack.peek())//找出一個比當前元素大的stack.pop();if(!stack.isEmpty())//存在一個比當前元素大的,則加入結果并且標記為已找到{ints[i]=stack.peek(); booleans[i]=true;} stack.push(nums[i]);}for (int i = n-1; i >=0; i--) {//因為是循環數組,所以需要再計算一次if(booleans[i]) continue;while (!stack.isEmpty()&&nums[i]>=stack.peek())stack.pop();if(!stack.isEmpty()){ints[i]=stack.peek(); booleans[i]=true;}stack.push(nums[i]);}return ints;}
}

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

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

相關文章

setNeedsDisplay看我就懂!

前言&#xff1a; setNeedsDisplay異步執行的。它會自動調用drawRect方法&#xff0c;這樣可以拿到 UIGraphicsGetCurrentContext&#xff0c;就可以繪制了。而setNeedsLayout會默認調用layoutSubViews&#xff0c;處理子視圖中的一些數據。 一、著手 我定義了一個UIView的子類…

如何使用ArchUnit測試Java項目的體系結構

by Emre Savc?由EmreSavc? 如何使用ArchUnit測試Java項目的體系結構 (How to test your Java project’s architecture with ArchUnit) In this post, I will show you an interesting library called ArchUnit that I met recently. It does not test your code flow or bu…

解決ionic3 android 運行出現Application Error - The connection to the server was unsuccessful

在真機上啟動ionic3打包成的android APK,啟動了很久結果彈出這個問題&#xff1a; Application Error - The connection to the server was unsuccessful 可能是我項目資源太多東西了&#xff0c;啟動的時間太久了&#xff0c;導致超時了。 解決方案是在項目目錄下的config.xml…

特征工程之特征選擇_特征工程與特征選擇

特征工程之特征選擇&#x1f4c8;Python金融系列 (&#x1f4c8;Python for finance series) Warning: There is no magical formula or Holy Grail here, though a new world might open the door for you.警告 &#xff1a; 這里沒有神奇的配方或圣杯&#xff0c;盡管新世界可…

搭建Harbor企業級docker倉庫

https://www.cnblogs.com/pangguoping/p/7650014.html 轉載于:https://www.cnblogs.com/gcgc/p/11377461.html

leetcode 131. 分割回文串(dp+回溯)

給你一個字符串 s&#xff0c;請你將 s 分割成一些子串&#xff0c;使每個子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正著讀和反著讀都一樣的字符串。 示例 1&#xff1a; 輸入&#xff1a;s “aab” 輸出&#xff1a;[[“a”,“a”,“b”],[“aa”,“b”]]…

[翻譯練習] 對視圖控制器壓入導航棧進行測試

譯自&#xff1a;swiftandpainless.com/testing-pus… 上個月我寫的關于使用 Swift 進行測試驅動開發的書終于出版了&#xff0c;我會在本文和接下來的一些博文中介紹這本書撰寫過程中的一些心得和體會。 在本文中&#xff0c;我將會展示一種很好的用來測試一個視圖控制器是否因…

python多人游戲服務器_Python在線多人游戲開發教程

python多人游戲服務器This Python online game tutorial from Tech with Tim will show you how to code a scaleable multiplayer game with python using sockets/networking and pygame. You will learn how to deploy your game so that people anywhere around the world …

版本號控制-GitHub

前面幾篇文章。我們介紹了Git的基本使用方法及Gitserver的搭建。本篇文章來學習一下怎樣使用GitHub。GitHub是開源的代碼庫以及版本號控制庫&#xff0c;是眼下使用網絡上使用最為廣泛的服務&#xff0c;GitHub能夠托管各種Git庫。首先我們須要注冊一個GitHub賬號&#xff0c;打…

leetcode132. 分割回文串 II(dp)

給你一個字符串 s&#xff0c;請你將 s 分割成一些子串&#xff0c;使每個子串都是回文。 返回符合要求的 最少分割次數 。 示例 1&#xff1a; 輸入&#xff1a;s “aab” 輸出&#xff1a;1 解釋&#xff1a;只需一次分割就可將 s 分割成 [“aa”,“b”] 這樣兩個回文子串…

數據標準化和離散化

在某些比較和評價的指標處理中經常需要去除數據的單位限制&#xff0c;將其轉化為無量綱的純數值&#xff0c;便于不同單位或量級的指標能夠進行比較和加權。因此需要通過一定的方法進行數據標準化&#xff0c;將數據按比例縮放&#xff0c;使之落入一個小的特定區間。 一、標準…

熊貓tv新功能介紹_熊貓簡單介紹

熊貓tv新功能介紹Out of all technologies that is introduced in Data Analysis, Pandas is one of the most popular and widely used library.在Data Analysis引入的所有技術中&#xff0c;P andas是最受歡迎和使用最廣泛的庫之一。 So what are we going to cover :那么我…

關于sublime-text-2的Package Control組件安裝方法,自動和手動

之前在自己的文章《Linux下安裝以及破解sublim-text-2編輯器》的文章中提到過關于sublime-text-2的Package Control組件安裝方法。 當時使用的是粘貼代碼&#xff1a; 1import urllib2,os;pfPackage Control.sublime-package;ippsublime.installed_packages_path();os.makedirs…

上海區塊鏈會議演講ppt_進行第一次會議演講的完整指南

上海區塊鏈會議演講pptConferences can be stressful even if you are not giving a talk. On the other hand, speaking can really boost your career, help you network, allow you to travel for (almost) free, and give back to others at the same time.即使您不講話…

windows下Call to undefined function curl_init() error問題

本地項目中使用到curl_init()時出現Call to undefined function curl_init()的錯誤&#xff0c;去掉php.ini中的extensionphp_curl.dll前的分號還是不行&#xff0c;phpinfo()中無curl模塊&#xff0c;于是上網搜索并實踐了如下方法&#xff0c;成功&#xff1a; 在使用php5的c…

數據轉換軟件_數據轉換

數據轉換軟件&#x1f4c8;Python金融系列 (&#x1f4c8;Python for finance series) Warning: There is no magical formula or Holy Grail here, though a new world might open the door for you.警告 &#xff1a;這里沒有神奇的配方或圣杯&#xff0c;盡管新世界可能為您…

leetcode 1047. 刪除字符串中的所有相鄰重復項(棧)

給出由小寫字母組成的字符串 S&#xff0c;重復項刪除操作會選擇兩個相鄰且相同的字母&#xff0c;并刪除它們。 在 S 上反復執行重復項刪除操作&#xff0c;直到無法繼續刪除。 在完成所有重復項刪除操作后返回最終的字符串。答案保證唯一。 示例&#xff1a; 輸入&#x…

spring boot: spring Aware的目的是為了讓Bean獲得Spring容器的服務

Spring Aware的目的是為了讓Bean獲得Spring容器的服務 //獲取容器中的bean名稱import org.springframework.beans.factory.BeanNameAware;//獲得資源加載器&#xff0c;可以獲得額外的資源import org.springframework.context.ResourceLoaderAware; package ch2.aware; import …

10張圖帶你深入理解Docker容器和鏡像

【編者的話】本文用圖文并茂的方式介紹了容器、鏡像的區別和Docker每個命令后面的技術細節&#xff0c;能夠很好的幫助讀者深入理解Docker。這篇文章希望能夠幫助讀者深入理解Docker的命令&#xff0c;還有容器&#xff08;container&#xff09;和鏡像&#xff08;image&#…

matlab界area_Matlab的數據科學界

matlab界area意見 (Opinion) My personal interest in Data Science spans back to 2011. I was learning more about Economies and wanted to experiment with some of the ‘classic’ theories and whilst many of them held ground, at a micro level, many were also pur…