找出数组中右边比我小的元素
【题目】一个整数数组A,找到每个元素:右边第一个比我小的下标位置,没有则用-1表示
输入:[5,2]
输出:[1,-1]
解释:因为元素5的右边离我最近且比我小的位置应该A[1],最后一个元素2右边没有比2小的元素,所以应该输出-1
package leetcode; import java.util.HashMap; import java.util.Stack; public class FindRSmallSolution { int[] findRightSmall(int[] A){ //结果数组 int[] ans = new int[A.length]; //注意,栈中元素记录的是下标 Stackt = new Stack(); for(int i = 0 ; i< A.length ;i++){ final int x = A[i]; //每个元素都向左遍历栈中的元素完成消除动作 while(!t.empty() && A[t.peek()] > x){ //x消除的时候,记录一下被谁消除了 ans[t.peek()] =i ; //消除的时候,值更大的需要从栈中消失 t.pop(); } //剩下的入栈 t.push(i); } //栈中剩下的元素,由于没有人能消除他们,因此,只能将结果数组为-1 while(!t.empty()){ ans[t.peek() ]= -1; t.pop(); } return ans; } int[] findRightSmall2(int[] arr){ int[] res = new int[arr.length]; if(arr.length == 1){ res[arr.length-1] = -1; return res; } for(int i= 0 ;i ){ int flag =-1; for(int j=i+1 ;j < arr.length; j++){ if(arr[i] > arr[j]){ flag= 1; res[i]=j; break; } } if(flag !=1){ res[i] =-1; } } return res; } public static void main(String[] args){ FindRSmallSolution fs = new FindRSmallSolution(); int[] arr= {1,2,4,9,4,0,5}; int[] f =fs.findRightSmall2(arr); int[] e = fs.findRightSmall(arr); for(int h=0; h< f.length;h++){ System.out.println(f[h]); } System.out.println("==========================="); for(int n=0; n< f.length;n++){ System.out.println(e[n]); } } }