寻找无序数组中每个数后面第一个大于它的数

223 阅读1分钟
#include<vector>
#include <stack>
using namespace std;
vector<int> find(vector<int> &num) {
	int len = num.size();
	stack<int> s;
	int i = 0;
	vector<int> res(len, -1);
//通过维护一个单调递减栈来搜索,如果遇到递增的数组则可以确定栈内若干个数的结果
//本质为在杂乱的数组中维护递减栈寻找结果
	while (i < len) {
		if (s.empty() || num[s.top()] >= num[i]) {
			s.push(i++);
		}
		else{
			res[s.top()] = num[i];
			s.pop();
		}
	}
	return res;
}


int main() {
	vector<int> num = { 1, 3, 2, 4, 99, 101, 5, 8 };
	// vector<int> num = {1, 1, 1, 1, 1, 1, 1};
	// vector<int> num = {};
	vector<int> res = find(num);
	for (auto i : res)
		cout << i << "  ";

	return 0;
}