941. Valid Mountain Array
題目:
Given an array of integers arr
, return true
if and only if it is a valid mountain array.
Recall that arr is a mountain array if and only if:
arr.length >= 3
- There exists some
i
with0 < i < arr.length - 1
such that:arr[0] < arr[1] < ... < arr[i - 1] < A[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
Example 1:
Input: arr = [2,1] Output: false
Example 2:
Input: arr = [3,5,5] Output: false
Example 3:
Input: arr = [0,3,2,1] Output: true
Constraints:
1 <= arr.length <= 10^4
0 <= arr[i] <= 10^4
思路1:
題意是找陣列是不是一個山峰型的組,必須完整,半峰也返回false。作為一道easy題只有33%的通過率,不是很確定原因。正常思路是走一遍陣列,只要一直上升就每次更新當前最高點的index,如果中途遇到了相等,則false。如果遇到下降,break出來。這裡需要檢查是不是半峰,如果最高點index是0,說明並沒有上升,直接就下降了;如果最高點已經是陣列的最後一個,那就是一直在上升,沒有下降空間,這兩種情況都直接false。然後就從當前最高點繼續往下掃描,維持一直降的情況就好了。這是我做的比較直白的方法,思路2中介紹Lee神Lee215的邏輯上更高階的方法。
程式碼1:
class Solution {
public:
bool validMountainArray(vector<int>& arr) {
if(arr.size()<3)
return false;
int high=0;
for(int i=1;i<arr.size();i++)
{
if(arr[i]==arr[i-1])
return false;
else if(arr[i]>arr[i-1])
high=i;
else
break;
}
if(high==0||high==arr.size()-1)
return false;
for(int i=high+1;i<arr.size();i++)
{
if(arr[i]>=arr[i-1])
return false;
}
return true;
}
};
思路2:
用雙指標法。兩個人爬山,一個從左到右,一個從右到左,如果是一個正確的峰型,應該都是一路上升,然後在同一點即山峰遇到。最後需要檢查的是三件事:是不是在同一點遇到,左邊是不是在陣列第一位(一直降低的半峰),右邊是不是在陣列最後一位(一直增高的半峰),三點同時成立即可返回true。時間複雜度和思路1一樣都是,但是個人感覺邏輯上這個更高階。
程式碼2:
bool validMountainArray(vector<int>& A) {
int n = A.size(), i = 0, j = n - 1;
while (i + 1 < n && A[i] < A[i + 1]) i++;
while (j > 0 && A[j - 1] > A[j]) j--;
return i > 0 && i == j && j < n - 1;
}
相關文章
- [LeetCode] 852. Peak Index in a Mountain ArrayLeetCodeIndexAI
- Mountain CraftAIRaft
- 題941. 有效的山脈陣列陣列
- spring - mvc - @ValidSpringMVC
- Longest Valid Parentheses
- 036 Valid Sudoku
- 125. Valid Palindrome
- Leetcode 20 Valid ParenthesesLeetCode
- Leetcode 36 Valid SudokuLeetCode
- 65-Valid Number
- Array.from和 Array.of
- gipchaLowerProcessNode: no valid interfaces found to node
- Please provide a valid cache pathIDE
- await is only valid in async functionAIFunction
- Leetcode 32 Longest Valid ParenthesesLeetCode
- CSS :valid 選擇器CSS
- InnoDB: No valid checkpoint found.
- fatal: Not a valid object name: 'master'ObjectAST
- array
- PHP用foreach來表達array_walk/array_filter/array_map/array_reducePHPFilter
- Array()與Array.of()方法區別
- JS Array.reduce 實現 Array.map 和 Array.filterJSFilter
- Mountain Duck:將你的雲空間落到 Mac 本地管理AIMac
- array_filter ()、array_map ()、array_walk () 區別?容易記混淆!!!Filter
- @Valid和@Validated的區別
- @Valid 與 @Validated 的區別
- Caused by: Error: ' ' is not a valid resource name characterError
- A valid provisioning profile for this executable was not found.
- Leetcode 611 javascript Valid Triangle NumberLeetCodeJavaScript
- [LeetCode] 678. Valid Parenthesis StringLeetCode
- [LeetCode] 32. Longest Valid ParenthesesLeetCode
- The 2024 ICPC Asia EC Regionals Online Contest (II) - Problem B. Mountain BookingAI
- Unique Array
- Array Division
- Array Repetition
- Array物件物件
- Java中@Valid子物件註釋Java物件
- openssl_private_encrypt(): key param is not a valid