本文共 737 字,大约阅读时间需要 2 分钟。
【题目】
给你一个数组,找出数组中每个数左边离它近的比它大的数和右边离它近的比它大的数 [举例]输入 arr[]={3 4 1 5 6 2 7}
输出
-1 2 0 2 -1 -1 2 5 3 5 2 -1 5 -1
[代码]
1.O(N^2)public static int[][] rightWay(int []arr){ //首先创建一个结果 int [][] res=new int[arr.length][2]; //然后开始遍历 for(int i=0;i=0){ //这里是开始找左边最小的数了 if(arr[cur]
2.O(N)的方法
//O(N)的方法太秒了,思路就是,在栈里面存递增的序列(并且存入的是位置而不是大小)大小只是用来判断的 //当出现不能满足条件的时候,就进行对应的存位置操作,也就是要被弹出去的位置是结果位置,并且栈下面那个位置是结果位置的左边(因为能放入栈 //就说明是除栈顶元素之外,最大且小于栈顶元素的值了,而右边的,就是被触发条件的那个位置 public static int [][] getNearLessNoRepeat(int[]arr){ //创建数组 int [][]res=new int[arr.length][2]; //创建栈 Stackstack=new Stack<>(); //开始遍历 for(int i=0;i
转载地址:http://uifen.baihongyu.com/