給出一組資料,求出各個位置第乙個比自己大的位置,0代表沒有。
1 2 3 1 1 1 1 4 5
2 3 8 8 8 8 8 9 0
我們暴力辦法就是乙個乙個比較,時間複雜度n*n。
如果中間插了1億個1,則是個天文數字,所以需要使用單調棧。
思想:如果空棧或者當前位置值小於等於棧頂值,則入棧該位置。
否則,一直更新位置並出棧
descript:
有n座山,他們連在一起成一條直線,接著從左往右給出每座山的高度a[i],現在的問題是讓你求的每座山右邊的第乙個比它高的山是第幾座山呢?如果沒有則輸出0。
測試資料有多組。對於每組測試資料:
輸入乙個n表示有n座山(1 <= n <= 1000000)
接著輸入n個數a[i] ( 1 <= a[i] <= 1000000),表示第i座山的高度。
for (遍歷這個陣列)else
當前資料入棧;}}
#include
#include
#include
#include
#include
#define ll long long
#define ull unsigned long long
using
namespace std;
const
int n=
1e6+6;
int a[n]
;int
main()
q.push
(i);}}
while
(!q.
empty()
)for
(int i=
1;i<=t;i++
)printf
("%d "
,a[i]);
printf
("\n");
}return0;
}
陣列元素右邊第乙個比它大的數
題目描述 給定乙個無序的正整數陣列,找出陣列中每個元素右邊第乙個比它大的數 若沒有,則返回 1 思路 將陣列首元素的下標入棧從下標為1的元素開始遍歷陣列假設當前遍歷到的第i個元素是x,若x大於棧頂下標對應的元素,那麼這個棧頂下標對應元素的右邊第乙個比它大的數就是x,將棧頂下標出棧,然後繼續處理剩下的...
陣列中每個位置右邊第乙個比它大的數
給定乙個陣列,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 時間,也就是遍歷...
在乙個有序數列中找到第乙個比x大的數的位置
print res res,第乙個比 s大的數為 x,l res a 3,6,7,7,9,10,13 binary search a,0 binary search a,2 binary search a,3 binary search a,6 binary search a,7 binary se...