zoukankan      html  css  js  c++  java
  • 下一个更大元素 II

    时间复杂度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;
    
            
        }
    }
    
    

  • 相关阅读:
    常用的字符串内建函数(三)
    常用的字符串内建函数(二)
    常用的字符串内建函数(一)
    Python 运算符
    Python标准数据类型--数字类型
    HTTPS及免费证书获取
    try...catch...finally
    加密和SSH认证
    全表更新锁表
    秩和比
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13423114.html
Copyright © 2011-2022 走看看