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

2022-08-25  本文已影响0人  水中的蓝天

无序数组,找到左侧元素比它小,右侧元素比它大的元素 要求不能对数组进行排序

题目分析
一个无序数组中要想寻找某一个索引位元素左边比自己小右边比自己大,那就需要满足这个索引位的元素要大于左边最大值并且小于右边最小值才行;
这样就得到解题思路:


public void findEle(int[] nums) {

 //0.边界处理
 if(nums==null || nums.length==0) return;

//1.定义需要的数据结构
int[] leftMaxs = new int[nums.length];
int[] rightMins = new int[num.length];
leftMaxs[1] = nums[0];//1索引位左边最大值就是0位置的值
rightMins[nums.length-2] = nums[numlength-1];//最后一个的值就是前一个值得右边最小值
//结果数组
ArrayList  res = new ArrayList();

//2.遍历得到结果
//2.1求出i位置左边最大值数组 右边最小值数组

for(int li = 2; li < nums.length - 3;li++) {
   //前一个位置的左边最大值跟前一个位置的值做对比
   leftMaxs[li] = Math.max(leftMaxs[li-1],nums[li-1]);
}

for(int ri = nums.length - 3; ri > 1;ri--) {
    //后一个位置的右边最小值跟后一个位置的值做对比
    rightMins[ri] = Math.min(rightMins[ri+1],nums[ri+1]);
}

//两个循环合并一趟得到结果
//for(int li = 2,ri = nums.length-3; li < nums.length - 2;li++,ri--) {
   //前一个位置的左边最大值跟前一个位置的值做对比
 //  leftMaxs[li] = Math.max(leftMaxs[li-1],nums[li-1]);
    //后一个位置的右边最小值跟后一个位置的值做对比
  //  rightMins[ri] = Math.min(rightMins[ri+1],nums[ri+1]);
//}

//2.2寻找合适的元素
for(int j = 1;j < nums.length-1;j++){
   //比左边最大值大比右边最小值小
   if(leftMaxs[j] <= nums[j] && nums[j] <= rightMins[j]) {
      res.add(nums[j]);
   }

}

}

上一篇 下一篇

猜你喜欢

热点阅读