陣列中每個位置右邊第乙個比它大的數

2021-09-28 22:33:57 字數 938 閱讀 7311

給定乙個陣列,o(n) 時間複雜度求出所有元素右邊第乙個大於該元素的值。

樣例輸入:1, 5, 3, 6, 4, 8, 9, 10, 2

樣例輸出:5, 6, 6, 8, 8, 9, 10, -1, -1

樣例輸入:8, 2, 5, 4, 3, 9, 7, 2, 5

樣例輸出:9, 5, 9, 9, 9, -1, -1, 5, -1

題目的終點當然是 o(1) 時間,也就是遍歷一次就應該能夠輸出,那一定是需要輔助空間的了,這裡用到的是單調棧,棧裡存放的是陣列下標,陣列大小和 v 一樣,所有元素都初始化為 -1。

每次遍歷到陣列 v 的乙個位置 i,設棧頂值為 top:

相當於,只要當前元素值大於棧頂存放索引的陣列元素值,那設定右邊最大值,然後 pop,繼續判斷。

#include

#include

#include

using

namespace std;

vector<

int>

right_larger

(const vector<

int>

& v)

st.push

(i);

}return res;

}int

main()

);for(

const

int& i : res1)

cout << i <<

' ';

cout << endl;

auto res2 =

right_larger()

;for

(const

int& i : res2)

cout << i <<

' ';

}

陣列元素右邊第乙個比它大的數

題目描述 給定乙個無序的正整數陣列,找出陣列中每個元素右邊第乙個比它大的數 若沒有,則返回 1 思路 將陣列首元素的下標入棧從下標為1的元素開始遍歷陣列假設當前遍歷到的第i個元素是x,若x大於棧頂下標對應的元素,那麼這個棧頂下標對應元素的右邊第乙個比它大的數就是x,將棧頂下標出棧,然後繼續處理剩下的...

排序陣列查詢第乙個和最後乙個位置

描述 給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 package leetcoder author zhaoliang program ne...

二分查詢求元素的第乙個位置和最後乙個位置

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 class solution def fp self,nums,l,r,t while lmid...