这个题目用栈可以很好的解决;
下面给出例子: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 }