找出一个数组中全部符合条件的数,这个数大于它前面的全部数,小于后

2020-08-23  本文已影响0人  编程小王子AAA

找出一个数组中全部符合条件的数,这个数大于它前面的全部数,小于后面的全部数。要求时间空间不能超过O(N)。


package com.coolinkiot.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * @data Administrator
 * @data 2020/8/23 0023
 */
public class ArraysSort {

    public static List<Integer> findNums(int[] nums) {
        List<Integer> res = new ArrayList<>();

        int n = nums.length;
        int[] rightMin = new int[n];
        int[] leftMax = new int[n];

        leftMax[0] = nums[0];
        for (int i = 1; i < n; i++) {
            if (nums[i] > leftMax[i - 1]) {
                leftMax[i] = nums[i];
            } else {
                leftMax[i] = leftMax[i - 1];
            }
        }

        rightMin[n - 1] = nums[n - 1];
        for (int i = n - 2; i >= 0; i--) {
            if (nums[i] < rightMin[i + 1]) {
                rightMin[i] = nums[i];
            } else {
                rightMin[i] = rightMin[i + 1];
            }
        }

        for (int i = 0; i < n; i++) {
            if (leftMax[i] == rightMin[i]) {
                res.add(leftMax[i]);
            }
        }
        return res;
    }

    public static void main(String[] args) {
        int[] exam = {7, 10, 2, 6, 19, 22, 32};
        System.out.println(findNums(exam));
    }

}

上一篇 下一篇

猜你喜欢

热点阅读