题目等级为简单,做起来可真是一言难尽
1. 题目描述
2. 题目描述
- 搞清楚山脉数组的定义:长度大于等于3且先升序再降序【重复的值直接false】
- 先判断一个数组是否升序:
i + 1 < N && A[i] < A[i + 1]
- 如果当前
i == 0 || i == A.Length
,没有升序或降序序列,直接返回 false - 再判断是否降序:
i + 1 < N && A[i] > A[i + 1]
- 如果最后
i == A.Length - 1
返回 true
3. 题目代码
3.1 题解代码
class Solution { public boolean validMountainArray(int[] A) { int N = A.length; int i = 0; // 递增扫描 while (i + 1 < N && A[i] < A[i + 1]) { i++; } // 最高点不能是数组的第一个位置或最后一个位置 if (i == 0 || i == N - 1) { return false; } // 递减扫描 while (i + 1 < N && A[i] > A[i + 1]) { i++; } return i == N - 1; } }
3.1 我的代码
public bool ValidMountainArray(int[] A) { if (A.Length < 3) { return false; } bool num1 = false; // 代表上升 int num = 0; int cnt = 0; for (num = 1; num < A.Length; num++) { if (A[num] > A[num - 1]) { cnt = 1; continue; } else { num1 = true; // 上升 break; } } if (num == A.Length - 1 && A[num] < A[num - 1]) // 直接到头了,没有下降的过程 { return true; } else if (num == A.Length - 1) { return false; } else if (num == A.Length) { return false; } int x = A[num - 1]; for (num = num; num < A.Length; num++) { if (A[num] <= A[num - 1]) { continue; } else { return false; } } int p = 0; for (int i = 0; i < A.Length; i++) { if (x == A[i]) { p++; } } if (p == 1 && num1 == true && cnt == 1) { return true; } else { return false; } }