給定乙個陣列,o(n) 時間複雜度求出所有元素右邊第乙個大於該元素的值。
樣例輸入:1, 5, 3, 6, 4, 8, 9, 10, 2題目的終點當然是 o(1) 時間,也就是遍歷一次就應該能夠輸出,那一定是需要輔助空間的了,這裡用到的是單調棧,棧裡存放的是陣列下標,陣列大小和 v 一樣,所有元素都初始化為 -1。樣例輸出: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
每次遍歷到陣列 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...