完成于2020.11.03
有效的山脈數組
來自力扣的一個題目,依照慣例,
貼一下題目鏈接:點擊進入:https://leetcode-cn.com/problems/valid-mountain-array/
題目描述
然後代碼
bool validMountainArray(int* A, int ASize)
{
int j = 0;//j用于计数,记录数组最大元素的下标
for(int i = 0;i<ASize-1;i++)
{
if(A[i]<A[i+1])//当下一个元素大于当前元素,就让j等于下一个元素的下标
{
j = i+1;
}
else//只要下一个元素小于当前元素,就跳出循环(节省判断时间)
{
break;
}
}//循环结束之后,j等于最大元素的下标
int R1=1;//R1用于计数
for(int R = ASize-1;R>j;R--)//从数组尾部向前遍历,直到到达最大元素
{
if(A[R]<A[R-1])//当上一个元素比当前元素大,让R+1
{
R1+=1;
}
else
{
break;//只要有一次上一个元素小于当前元素,就跳出循环
}
}
if (R1==ASize-j&&j!=0&&R1!=1)//J!=0排除最大元素在数组头部,R1!=1排除最大元素在数组尾部
{
return true;
}
else
{
return false;
}
}
官方優解
bool validMountainArray(int* A, int ASize) {
int i = 0;
// 递增扫描
while (i + 1 < ASize && A[i] < A[i + 1])
{
i++;
}
// 最高点不能是数组的第一个位置或最后一个位置
if (i == 0 || i == ASize - 1)
{
return false;
}
// 递减扫描
while (i + 1 < ASize && A[i] > A[i + 1])
{
i++;
}
return i == ASize - 1;
}
/*該解來自力扣官方,侵刪*/
提交結果
慣慣慣念
- 這道題的關鍵是找出數組中最大元素的下標,知道之後,就可以通過從前往後遍歷和從後往前遍歷來判斷數組是否為山脈數組(判斷條件:第一次遍歷元素個數+第二次遍歷元素個數=數組元素個數),之後要注意首尾元素不能是“山峰”。
By Levi.