题目等级为简单,做起来可真是一言难尽
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;
}
}