赞
踩
- // 无序数组,找到元素,它左边的元素都比它小,它右边的元素都比它大
- @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]);
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。