给定一个A整数数组,true当且仅当它是有效的山数组时才返回。回想一下,A是一个山脉阵列,当且仅当:A.length >= 3。存在一些i与 0 < i < A.length - 1 这样的: A[0] < A[1] < ... A[i-1] < A[i] A[i] > A[i+1] > ... > A[B.length - 1]
例1: 输入:[2,1] 输出:false
例2: 输入:[3,5,5] 输出:false
例3: 输入:[0,3,2,1] 输出:true
注意:
0 <= A.length <= 10000 ,0 <= A[i] <= 10000
解题思路:首先求出数组最大值和下标。然后根据数组最大值的下标分别设置向左向右的光标(光标初始值为最大值下标)。向左时若靠近最大值光标的值大于其下标的前一个值光标前移。向右时,靠近最大值光标的值大于其下标的后一个值光标后移。向前的光标值等于0,向后的光标值等于A.length-1则为有效山阵。 public static boolean validMountainArray(int[] A) { if (A.length>=3) { int max=A[0]; int m=0; for (int i=0;i<A.length;i++) { if (A[i]>=max) { max=A[i]; m=i; } } int x=m; int y=m; if (m==A.length-1||m==0) { return false; }else { for (int j=m;j>0;j--) { if (A[j]-A[j-1]>0) { x--; } } for (int k=m;k<A.length-1;k++) { if (A[k]-A[k+1]>0) { y++; } } if (x==0&&y==A.length-1) return true; else return false; } }else { return false; } }