找出一个数组中全部符合条件的数,这个数大于它前面的全部数,小于后面的全部数。要求时间空间不能超过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));
}
}











网友评论