思路:当前数分别跟左边和右边比一遍,获取第一个小的值下标

1.循环比较赋值,就是时间复杂度有点高

  • 时间复杂度 n^2
  • 空间复杂度 1个二维数组 2个常量
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int一维数组 
     * @return int二维数组
     */
    public int[][] foundMonotoneStack (int[] nums) {
        // write code here
        int length = nums.length;
        int[][] ints= new int[length][2];
        for(int i=0;i<length;i++){
            int leftV=-1;
            int rightV=-1;
            for(int left=i-1;left>=0;left--){
                if(nums[i]>nums[left]){
                    leftV=left;
                    break;
                }
            }
            for(int right=i+1;right<length;right++){
                if(nums[i]>nums[right]){
                    rightV=right;
                    break;
                }
            }
            ints[i][0]=leftV;
            ints[i][1]=rightV;

        }
        return ints;
    }
}

2.利用栈存储下标,从左和从右遍历数组,以从左为例,空栈时,说明左边无数据,左边不存在最小数,即下标为-1,一个一个弹出下标,获取对应下标的数组值(当前值的下标比栈中的值要向前1个),小于当前值则返回栈内最新值,大于则弹出继续比较,直到空栈即找不到,存入-1.并存入当前下标,进行下一次比较

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int一维数组 
     * @return int二维数组
     */
    public int[][] foundMonotoneStack (int[] nums) {
        // write code here
        int length = nums.length;
        int[][] ints= new int[length][2];
        Stack<Integer> stack = new Stack();
        for(int i=0;i<length;i++){
            while(!stack.isEmpty()&& nums[stack.peek()]>=nums[i]){
                stack.pop();
            }
            if(stack.isEmpty()){
                ints[i][0]=-1;
            }else{
                ints[i][0]=stack.peek();
            }
            stack.push(i);
        }
        stack.clear();
        for(int i=length-1;i>=0;i--){
            while(!stack.isEmpty()&& nums[stack.peek()]>=nums[i]){
                stack.pop();
            }
            if(stack.isEmpty()){
                ints[i][1]=-1;
            }else{
                ints[i][1]=stack.peek();
            }
            stack.push(i);
        }
        return ints;
    }
}