LeetCode941:有效山脉数组

给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false

让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:

  • A.length >= 3
  • 在 0 < i < A.length - 1 条件下,存在 i 使得:
    • 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

提示:

  1. 0 <= A.length <= 10000
  2. 0 <= A[i] <= 10000 

解析:

        山脉数组的特点是必须只有一个峰值,且该峰值不能在数组的两端,所以,分为两个阶段来判断,首先是上坡的时候,数组是依次增大的,然后是下坡的时候,数组依次减小,还要判断数组是否一直减小或一直增大。

代码:

bool validMountainArray(vector<int>& A) 
{
	int length = A.size();
	bool up = true;//判断上坡下坡
	if (length < 3)//长度小于3
		return false;
	int i;
	for (i = 0; i < length - 1; i++)
	{
		if (up)
		{
			if (A[i] < A[i + 1])
				continue;
			else if (A[i] == A[i + 1])//不能有相等的值
				return false;
			else
			{
				if (i == 0)//如果从开始就是下坡,则返回false
					return false;
				up = false;
			}
		}
		else
		{
			if (A[i] > A[i + 1])
				continue;
			else
				return false;
		}
	}
	if (up&&i == length - 1)//一直是上坡的情况
		return false;
	return true;
}

猜你喜欢

转载自blog.csdn.net/qq_36214481/article/details/85317452