美文网首页
数组中每个数右边第一个比它大的元素

数组中每个数右边第一个比它大的元素

作者: 编程小王子AAA | 来源:发表于2020-08-10 07:53 被阅读0次

数组中每个数右边第一个比它大的元素

如数组A=[1,5,3,6,4,8,9,10] 输出[5, 6, 6, 8, 8, 9, 10, -1]
如数组A=[8, 2, 5, 4, 3, 9, 7, 2, 5] 输出[9, 5, 9, 9, 9, -1, -1, 5, -1]


## 1、暴力遍历

复杂度为O(n^2)的解法,遍历数组中的每一个后面所有元素,找到第一个大于它的,输出即可
    public static int[] findMaxRight(int[] array) {
        if(array == null)
            return array;
        int size = array.length;
        int[] result = new int[size];
        for (int i = 0; i < size - 1; i++) {
            for (int j = i+1; j < size; j++) {
                if(array[j] > array[i]) {
                    result[i] = array[j];
                    break;
                }
            }
        }
        result[size-1] = -1;//最后元素没有右边元素
        return result;
    }

## 2、借助栈,时间复杂度O(n)
public static int[] findMaxRight(int[] array) {
        if(array == null)
            return array;
        int size = array.length;
        int[] result = new int[size];
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        int index = 1;
        while(index < size) {
            if(!stack.isEmpty() && array[index] > array[stack.peek()]) {
                result[stack.pop()] = array[index];
            }else {
                stack.push(index);
                index++;
            }
        }
        if(!stack.isEmpty())
            result[stack.pop()] = -1;
        return result;
    }

相关文章

  • 数组中每个数右边第一个比它大的元素

    数组中每个数右边第一个比它大的元素 如数组A=[1,5,3,6,4,8,9,10] 输出[5, 6, 6, 8, ...

  • 2018-05-30 496. Next Greater Ele

    题意:给你两个数组,找出数组一中所有的元素,在第二个数组中对应位置右边第一个比该数大的数。 第一个数组中元素“4”...

  • 快速排序

    基本原理 选取一个数,把比它小的放在左边,比它大的放在右边,再对左右每个子数组做相同操作,直至操作元素个数为1. ...

  • 496-下一个更大的元素I

    数组2包含数组1,而且都没有重复的元素,求数组1中每个数字在数组二中对应位置之后第一个比它大的数字,没有则输出-1。

  • 排序算法-快速排序

    快速排序算法的核心是在一个数组中,将第一个元素放置在中间位置使这个数组变为左边比这个元素都小,右边比这个组都大的一...

  • 4.js三种数组排序方法

    快速排序 在数组中间找到一个数,作为基准,然后用剩下的数,和基准点进行比较,比它小的放到左边数组,比它大的放到右边...

  • 算法进阶三

    单调栈的应用 单调栈的做法:找到每个数左边第一个比它大的数,右边第一个比它大的数串到它下面。 证明 :形成的不是森...

  • 无序数组,找到左侧元素比它小,右侧元素比它大的元素

    无序数组,找到左侧元素比它小,右侧元素比它大的元素 要求不能对数组进行排序 题目分析一个无序数组中要想寻找某一个索...

  • 快速排序

    思想 以某个数为基准,将比它小的都移到它左边,比它大的都移动到它右边,然后分别再对其左右子数组进行同样的操作。怎么...

  • jQuery之常用的工具函数详解(二)

    $.merge() 合并两个数组内容到第一个数组。 $.map() 将一个数组中的所有元素转换到另一个数组中。 $...

网友评论

      本文标题:数组中每个数右边第一个比它大的元素

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