假设我们有一个圆形数组(最后一个元素的下一个元素是数组的第一个元素),我们必须为每个元素显示下一个更大的数字。在这里,数字x的下一个更大的数字是数组中其遍历顺序中第一个更大的数字,这意味着我们可以循环搜索以找到其下一个更大的数字。如果不存在,则为-1。因此,如果数字为[1、2、1、3、2、1],则输出将为:[2、3、3,-1、3、2]
为了解决这个问题,我们将遵循以下步骤-
n:=数组大小
定义一个称为res的数组,大小为n,并用-1填充,定义一个堆栈st
对于我在0到2n范围内
res [堆栈顶部]:= x
从堆栈中删除顶部元素
index:= i mod n,x:= nums [index]
当st不为空且nums [堆栈顶部] <x
将索引插入堆栈
返回资源
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> nextGreaterElements(vector<int>& nums) { int n = nums.size(); vector <int> res(n, - 1); stack <int> st; for(int i = 0; i < 2 * n; i++){ int idx = i % n; int x = nums[idx]; while(!st.empty() && nums[st.top()] < x){ res[st.top()] = x; st.pop(); } st.push(idx); } return res; } }; main(){ Solution ob; vector<int> v = {1,2,1,3,2,1}; print_vector(ob.nextGreaterElements(v)); }
[1,2,1,3,2,1]
输出结果
[2,3,3,-1,3,2]