// 无序数组,找到元素,它左边的元素都比它小,它右边的元素都比它大
@Test
public void findEleTest() {
int[] arr = new int[]{1,2,3,9,5,6,10,11,13,15,17};
findEle(arr);
System.out.println(list);
}
public void findEle(int[] nums) {
// 该数组存储元素i左侧最大的值
int[] leftMax = new int[nums.length];
// 该数组存储元素i右侧最小的值
int[] rightMin = new int[nums.length];
// 第一个和最后一个元素不需要管
leftMax[1] = nums[0];
rightMin[nums.length - 2] = nums[nums.length - 1];
for (int i = 2,j = nums.length - 3; i < nums.length - 2; i++,j--) {
leftMax[i] = Math.max(leftMax[i-1], nums[i-1]);
rightMin[j] = Math.min(rightMin[j + 1], nums[j + 1]);
}
// 遍历判断找到符合条件的元素
for (int i = 1; i < nums.length - 1; i++) {
if (leftMax[i] <= nums[i] && nums[i] <= rightMin[i]) {
list.add(nums[i]);
}
}
}