给定一个数组,找出这个数组中每一个数右边的第一个比它大的数


这个题目用栈可以很好的解决;

下面给出例子: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删除。



猜您在找 算法:在数组中找出所有这样的数,它比它前面的数都大,比它后面的数都小 给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。 [面试题]在数组中找出3个数使得它们和为0 找出多个数组中的最大数 右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。 剑指Offer(Java版)第五十六题:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。 也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 面试题3:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 题1:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 找出一个数组中只出现一次的数字
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM