时间复杂度O(n^2)
class Solution {
public int[] nextGreaterElements(int[] nums) {
int[] res = new int[nums.length];
int top = 0;
for(int i=0;i<nums.length;i++){
boolean flag = false;
for(int j=(i+1)%nums.length;j!=i;j=(j+1)%nums.length){
if(nums[j] > nums[i]){
flag = true;
res[top++] = nums[j];
break;
}
}
if(!flag) res[top++] = -1;
}
return res;
}
}
单调栈:时间复杂度O(n)
栈内存储的是单调不递增的数组下标,当指向元素大于栈顶对应的数组元素,出栈并且结果数组对应的位置赋值为指向元素。
class Solution {
public int[] nextGreaterElements(int[] nums) {
int numsLen = nums.length;
int[] res = new int[numsLen];
Arrays.fill(res,-1);
Stack<Integer> stk = new Stack<>();//存储的是单调不递增数组的index(栈底到栈顶)
for(int i=0;i<numsLen*2;i++){//循环两遍相当于循环数组遍历
int num = nums[i%numsLen];
while(!stk.isEmpty() && nums[stk.peek()] < num){
res[stk.pop()] = num;
}
if(i < numsLen) stk.add(i);//小于n才有存储的必要
}
return res;
}
}