|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述:
- 给定一个整数数组,返回一个数组。该返回数组中第i个数字为,原数组中第i个位置的数字至少往右走多少步才能遇到比它大的数字。如果遇不到或者已经处于最右的位置,则置为-1。
- 输入描述:
- 输入为多行,第一行为一个整数N,1≤N≤106
- 接下来一共有N行,每一行为一个整数M,0≤M≤232-1
- 输出描述:
- 输出 N 行,每行一个数字表示转换之后的数组
- 示例1
- 输入
- 5
- 91
- 10
- 3
- 22
- 40
- 输出
- -1
- 2
- 1
- 1
- -1
复制代码
- #include <vector>
- #include <iostream>
- #include <algorithm>
- #include <stack>
- using namespace std;
- vector<int> solution(vector<int> &input){
- vector<int> res(input.size(), 0);
- int temp = input.size()-1;
- stack<int> store;
- for(int i = temp; i >= 0; i--){
- while(!store.empty() && input[i] >= input[store.top()]){
- store.pop();
- }
- if(store.empty()) res[i] = -1;
- else res[i] = store.top()-i;
- store.push(i);
- }
- return res;
- }
- int main(void){
- int total;
- cin >> total;
- int number;
- vector<int> input;
- for(int i = 0; i < total; i++){
- cin >> number;
- input.push_back(number);
- }
- vector<int> res = solution(input);
- for(auto cha : res) cout << cha << endl;
- return 0;
- }
复制代码
注意事项:
1.用以维持一个从堆的底部到头部依次递减的序列。
2.类比:https://fishc.com.cn/thread-169443-1-1.html 反向循环 |
|