【教3妹學編程-算法題】下一個更大元素 IV

陽光明媚

3妹:“太陽當空照,花兒對我笑,小鳥說早早早,你為什么背上炸藥包”
2哥 :3妹,什么事呀這么開發。
3妹:2哥你看今天的天氣多好啊,陽光明媚、萬里無云、秋高氣爽,適合秋游。
2哥:是啊,立冬之后天氣多以多云為主,好不容易艷陽高照。可是你不能秋游,趕緊收拾收拾上班去啦
3妹:哼, 好吧~
2哥:給你出了一道題發你微信里了, 上班通勤的路上記得看一下,回來問你答案~
image.png
3妹:知道啦,難不倒我!

題目:

給你一個下標從 0 開始的非負整數數組 nums 。對于 nums 中每一個整數,你必須找到對應元素的 第二大 整數。

如果 nums[j] 滿足以下條件,那么我們稱它為 nums[i] 的 第二大 整數:

j > i
nums[j] > nums[i]
恰好存在 一個 k 滿足 i < k < j 且 nums[k] > nums[i] 。
如果不存在 nums[j] ,那么第二大整數為 -1 。

比方說,數組 [1, 2, 4, 3] 中,1 的第二大整數是 4 ,2 的第二大整數是 3 ,3 和 4 的第二大整數是 -1 。
請你返回一個整數數組 answer ,其中 answer[i]是 nums[i] 的第二大整數。

示例 1:

輸入:nums = [2,4,0,9,6]
輸出:[9,6,6,-1,-1]
解釋:
下標為 0 處:2 的右邊,4 是大于 2 的第一個整數,9 是第二個大于 2 的整數。
下標為 1 處:4 的右邊,9 是大于 4 的第一個整數,6 是第二個大于 4 的整數。
下標為 2 處:0 的右邊,9 是大于 0 的第一個整數,6 是第二個大于 0 的整數。
下標為 3 處:右邊不存在大于 9 的整數,所以第二大整數為 -1 。
下標為 4 處:右邊不存在大于 6 的整數,所以第二大整數為 -1 。
所以我們返回 [9,6,6,-1,-1] 。
示例 2:

輸入:nums = [3,3]
輸出:[-1,-1]
解釋:
由于每個數右邊都沒有更大的數,所以我們返回 [-1,-1] 。

提示:

1 <= nums.length <= 10^5
0 <= nums[i] <= 10^9

思路:

思考

單調棧 + 優先隊列,
我們可以考慮將原始問題簡化為計算數組中每個數字的下一個比它大的數字。為了解決這一問題,我們可以利用「單調棧」算法。該算法的核心思想是利用一個棧來存儲數組元素的下標。在遍歷數組時,對于每個元素,執行以下操作:如果當前元素大于棧頂元素對應的值,說明找到了棧頂元素的下一個更大的數字,將棧頂元素出棧,并更新結果數組。如果當前元素小于等于棧頂元素對應的值,將當前元素的下標壓入棧中,保持棧的單調遞減性質。這樣,最終結果數組中存儲的就是每個數字的下一個比它大的數字(如果存在的話),如果沒有更大的數字,則對應位置的值為 ?1。

java代碼:

class Solution {public int[] secondGreaterElement(int[] nums) {int length = nums.length;int[] secondGreater = new int[length];Arrays.fill(secondGreater, -1);Deque<Integer> stack = new ArrayDeque<Integer>();PriorityQueue<int[]> pq = new PriorityQueue<int[]>((a, b) -> a[1] - b[1]);for (int i = 0; i < length; i++) {int num = nums[i];while (!pq.isEmpty() && pq.peek()[1] < num) {int index = pq.poll()[0];secondGreater[index] = num;}while (!stack.isEmpty() && nums[stack.peek()] < num) {int index = stack.pop();pq.offer(new int[]{index, nums[index]});}stack.push(i);}return secondGreater;}
}

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

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

相關文章

商城免費搭建之java商城 java電子商務Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c 鴻鵠云商

鴻鵠云商 SAAS云產品概述 【SAAS云平臺】打造全行業全渠道全場景的SaaS產品&#xff0c;為店鋪經營場景提供一體化解決方案&#xff1b;門店經營區域化、網店經營一體化&#xff0c;本地化、全方位、一站式服務&#xff0c;為多門店提供統一運營解決方案&#xff1b;提供豐富多…

使用C++和雙指針算法移除數組中的元素,且原地移除,不使用額外的空間

輸入一個數組nums和一個值val&#xff0c;在該數組中&#xff0c;凡是與val相等的元素全部移除&#xff0c;并最終輸出該數組&#xff0c;C代碼如下&#xff1a; #include<iostream> #include<vector> #include<ctime>//計算代碼所需要的時間 using namespac…

qt 容器QVector,QMap,QHash的常見使用與該迭代器的簡單介紹

一. QVector容器是一個動態數組&#xff0c;可以容納任意數量的元素,在相鄰的內存中存儲給定的數據類型作為一組數據,在QVector前部或中間位置插入元素都會導致內存中大量的數據元素移動,這使得操作速度會減慢.可使用迭代器對這組數據進行訪問. 和其他的容器類型類似,QVector…

AE無法連接到ME怎么辦?

最近學習了一下adobe的系列軟件 ae是2018的 me是2023的 本來想用me來做渲染的 發現鏈接不上 試了一下重裝ae&#xff0c;升級版本到2023 鏈接還是不行 幸好看了這篇博客解決了我的問題&#xff01;&#xff01; AE無法連接到ME怎么辦? AE和ME沒有裝在一個盤無法識別的 用了第二…

【Netty為什么適合做網絡編程】

Netty為什么適合做網絡編程 描述優點 描述 Netty是由JBOSS提供的一個Java開源框架。Netty提供異步的、基于事件驅動的網絡應用程序框架&#xff0c;用以快速開發高性能、高可靠性的網絡IO程序。Netty主要用來做網絡通信&#xff0c;一般可以用來做RPC框架的通信工具、實現即時…

特發性震顫的嚴重程度如何評估?

特發性震顫的嚴重程度評估是一個相對主觀和復雜的過程&#xff0c;需要醫生綜合考慮患者的多種癥狀和體征進行判斷。通常&#xff0c;評估特發性震顫的嚴重程度會考慮以下幾個方面&#xff1a; 一、震顫的頻率和強度 評估特發性震顫的嚴重程度時&#xff0c;首先要觀察患者震…

RS485網關如何采集傳感器和儀器儀表數據-天拓四方

在自動化生產和監測系統中&#xff0c;傳感器和儀器儀表扮演著重要的角色&#xff0c;它們可以收集各種數據&#xff0c;如溫度、壓力、流量等&#xff0c;并對這些數據進行必要的分析和處理。然而&#xff0c;如何有效地采集這些數據是一個關鍵問題。RS485網關是一種常見的設備…

裸機開發與Linux驅動開發的區別

一. 簡介 裸機開發&#xff0c;即我們常說的不帶系統的單片機開發。 Linux驅動開發&#xff0c;即帶文件系統的Linux驅動的開發。 二. 裸機開發與Linux驅動開發的區別 1. 裸機開發 比較底層&#xff0c;跟寄存器打交道&#xff0c;有些 MCU提供了庫。 2. Linux驅動開發…

MQ-Det: Multi-modal Queried Object Detection in the Wild

首個支持視覺和文本查詢的開放集目標檢測方法 NeurIPS2023 文章&#xff1a;https://arxiv.org/abs/2305.18980 代碼&#xff1a;https://github.com/YifanXu74/MQ-Det 主框圖 摘要 這篇文章提出了MQ-Det&#xff0c;一種高效的架構和預訓練策略&#xff0c;它利用文本描述的…

Spring框架中的五種常用設計模式

1、單例模式 Spring 的 Bean 默認是單例模式&#xff0c;通過 Spring 容器管理 Bean 的?命周期&#xff0c;保證每個 Bean 只被 創建?次&#xff0c;并在整個應?程序中重用。 2.工廠模式 Spring 使???模式通過 BeanFactory 和 ApplicationContext 創建并管理 Bean 對象…

以csv為源 flink 創建paimon 臨時表相關 join 操作

目錄 概述配置關鍵配置測試啟動 kyuubi執行配置中的命令 bug解決bug01bug02 結束 概述 目標&#xff1a;生產中有需要外部源數據做paimon的數據源&#xff0c;生成臨時表&#xff0c;以使用與現有正式表做相關統計及 join 操作。 環境&#xff1a;各組件版本如下 kyuubi 1.8…

Python從門到精通(九):numpy科學計算庫

? Numpy 這是一個三方的庫&#xff0c;是很多科學與工程庫的基礎。在機器學習中應用廣泛。 import numpy as np。 數組運算 import numpy as npax np.array([1, 2, 3, 4]) ay np.array([5, 6, 7, 8])type(ax) print(f{ax} * 2 {ax * 2}) #[2 4 6 8] print(f{ax} 10 {a…

Spring(Spring/Springboot 的創建) 基礎

一. Spring 1.1 Spring是什么&#xff1f; Spring 指的是 Spring Frameword(Spring 框架),它是一個開源框架。 Spring 是包含了眾多工具方法的IoC容器。 1.2 什么是容器&#xff1f; 容器時用來容納某種物品的裝置。 我們之前接觸到的容器&#xff1a; ? List/Map ->…

內存cache大量使用問題導致應用異常問題

概述 28s應用崩潰查看內存使用有大量cache。 分析 查看free 信息平時的確存在大量cache使用的情況查看dmes信息發現filesendserver崩潰 崩潰信息為系統調用 查看到page allocation failure:order 5 同時也看到系統內存使用情況 查看到系統實際還有部分內存為空閑內存&am…

【Android開發-26】Android中服務Service詳細講解

1&#xff0c;service的生命周期 Android中的Service&#xff0c;其生命周期相較Activity來說更為簡潔。它也有著自己的生命周期函數&#xff0c;系統會在特定的時刻調用對應的Service生命周期函數。 具體來說&#xff0c;Service的生命周期包含以下幾個方法&#xff1a; on…

[筆記] 使用 qemu/grub 模擬系統啟動(單分區)

背景 最近在學習操作系統&#xff0c;需要從零開始搭建系統&#xff0c;由于教程中給的虛擬機搭建的方式感覺還是過于重量級&#xff0c;因此研究了一下通過 qemu 模擬器&#xff0c;配合 grub 完成啟動系統的搭建。 qemu 介紹 qemu 是一款十分優秀的系統模擬器&#xff0c;…

Linux上進行Nacos安裝

Nacos安裝指南 僅供參考&#xff0c;若有錯誤&#xff0c;歡迎批評指正&#xff01; 后期會繼續上傳docker安裝nacos的過程&#xff01; 1.Windows安裝 開發階段采用單機安裝即可。 1.1.下載安裝包 在Nacos的GitHub頁面&#xff0c;提供有下載鏈接&#xff0c;可以下載編譯好…

《C++新經典設計模式》之第7章 單例模式

《C新經典設計模式》之第7章 單例模式 單例模式.cpp 單例模式.cpp #include <iostream> #include <memory> #include <mutex> #include <vector> #include <atomic> using namespace std;// 懶漢式&#xff0c;未釋放 namespace ns1 {class Gam…

手動搭建koa+ts項目框架(日志篇)

文章目錄 前言一、安裝koa-logger二、引入koa-logger并使用總結如有啟發&#xff0c;可點贊收藏喲~ 前言 本文基于手動搭建koats項目框架&#xff08;路由篇&#xff09;新增日志記錄 一、安裝koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

【每日一題】【12.11】1631.最小體力消耗路徑

&#x1f525;博客主頁&#xff1a; A_SHOWY&#x1f3a5;系列專欄&#xff1a;力扣刷題總結錄 數據結構 云計算 數字圖像處理 1631. 最小體力消耗路徑https://leetcode.cn/problems/path-with-minimum-effort/這道題目的核心思路是&#xff1a;使用了二分查找和BFS &a…