給定一個數組,找出這個數組中每一個數右邊的第一個比它大的數


這個題目用棧可以很好的解決;

下面給出例子:9 6 5 7 3 2 1 5 9 10,返回的是 10 7 7 9 5 5 5 9 10 N。

 1 #include<iostream>
 2 #include<vector>
 3 #include<stack>
 4 
 5 using namespace std;
 6 
 7 vector<int> FindRfmax(vector<int> nums){
 8     int len = nums.size();
 9     if (len == 0) return nums;
10     int i = 0;
11     vector<int> res(len);
12     stack<int> stk;
13     while (i < len){
14         if (stk.empty() || nums[stk.top()]>nums[i]){
15             stk.push(i++);
16         }
17         else{
18             res[stk.top()] = nums[i];
19             stk.pop();
20         }
21     }
22     while (!stk.empty()){
23         res[stk.top()] = INT_MIN;
24         stk.pop();
25     }
26     return res;
27 }
28 
29 void main()
30 {
31     vector<int> input = { 9, 6, 5, 7, 3, 2, 1, 5, 9, 10 };
32     vector<int> output;
33     output = FindRfmax(input);
34 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM