问题:查找所有元素后面第一个比他大的数
思路:用栈的方式将每个元素的位置下表存储起来,每次入栈的元素和当前栈顶代表的元素进行比较,如果大于栈顶元素则将其两个位置进行相减得到右边最近的大于自身的元素距离,如不大于栈顶元素则入栈;
vector<int> findMax(vector<int> num) { //cout << 1 << endl; if (!num.size()) return num; vector<int> res(num.size()); int i = 0; stack<int> s; int tmp = 0; while (i < num.size()) { tmp++; if (s.empty() || num[s.top()] >= num[i]) { s.push(i++); } else { res[s.top()] = i - s.top(); s.pop(); } } while (!s.empty()) { res[s.top()] = 0; s.pop(); } return res; } int main() { vector<int> num{ 56,45,96,34,85,64 }; num = findMax(num); for (int i = 0; i < num.size(); ++i) { cout << num[i] << endl; } return 0; }