美文网首页
数组常见问题

数组常见问题

作者: 知止9528 | 来源:发表于2021-02-21 00:25 被阅读0次

寻找左右两边第一个比自己大的数

public class MY_寻找左右两边第一个比它大的数 {
    public static void main(String[] args) {
        int[] nums = {3, 8, 5, 6, 9, 2, 1, 7};
        System.out.println(Arrays.toString(nums));
        printLeftAndRightFirstMax(nums);
    }

    public static void printLeftAndRightFirstMax(int[] nums) {

        int len = nums.length;
        int[] left = new int[len];
        int[] right = new int[len];
        //数据初始化
        for (int i = 0; i < len; i++) {
            left[i] = -1;
            right[i] = -1;
        }

        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < len; i++) {
            while (!stack.isEmpty() && nums[i] > nums[stack.peek()]) {
                //弹出栈内元素  并且更新右边第一个比它大的数
                right[stack.pop()] = i;
            }
            if (!stack.isEmpty() && nums[i] < nums[stack.peek()]) {
                left[i] = stack.peek();
            }
            stack.push(i);
        }

        for (int i = 0; i < nums.length; i++) {
            System.out.println("第" + i + "个数为:" + nums[i]);
            System.out.println("左边第一个比它大的数为:" + nums[left[i]==-1?i:left[i]]);
            System.out.println("右边第一个比它大的数为:" + nums[right[i]==-1?i:right[i]]);
            System.out.println("=======================");
        }
    }
}

相关文章

网友评论

      本文标题:数组常见问题

      本文链接:https://www.haomeiwen.com/subject/iasffltx.html