Учитывая массив целых чисел arr
, возврат true
тогда и только тогда, когда это допустимый массив гор.
Напомним, что arr является горным массивом тогда и только тогда, когда:
arr.length >= 3
There exists some i with 0 < i < arr.length - 1 such that:
arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
Пример 1 :
Input: arr = [2,1]
Output: false
Пример 2 :
Input: arr = [3,5,5]
Output: false
Пример 3 :
Input: arr = [0,3,2,1]
Output: true
Ограничения :
1 <= arr.length <= 104
0 <= arr[i] <= 104
Мысль :
- Сначала пройдите от малого к большому, чтобы найти индекс индекса массива вершины горы.
- Затем переходим от большого к меньшему, если конечный результат полностью равен индексу индекса последней цифры массива, возвращаем
true
- В противном случае верните
false
Если вы думаете так же, код, вероятно, выглядит так:
/*
* @lc app=leetcode.cn id=941 lang=cpp
*
* [941] 有效的山脉数组
*/
// @lc code=start
class Solution {
public:
bool validMountainArray(vector<int>& arr) {
int len = arr.size();
int i = 0;
while(i < len - 1 && arr[i] < arr[i + 1])
{
i++;
}
while(i < len - 1 && arr[i] > arr[i + 1])
{
i++;
}
return i == len - 1;
}
};
// @lc code=end
Нетрудно обнаружить, что при нахождении индекса на вершине горы необходимо суждение!
Так revised code
родилось:
/*
* @lc app=leetcode.cn id=941 lang=cpp
*
* [941] 有效的山脉数组
*/
// @lc code=start
class Solution {
public:
bool validMountainArray(vector<int>& arr) {
int len = arr.size();
int i = 0;
while(i < len - 1 && arr[i] < arr[i + 1])
{
i++;
}
if(i == len - 1 || i == 0)
{
return false;
}
while(i < len - 1 && arr[i] > arr[i + 1])
{
i++;
}
return i == len - 1;
}
};
// @lc code=end
переменный ток :