16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)
生活随笔
收集整理的這篇文章主要介紹了
16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
把符合下列屬性的數組 arr 稱為 山脈數組 :arr.length >= 3
存在下標 i(0 < i < arr.length - 1),滿足
arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
給出一個整數數組 arr,返回最長山脈子數組的長度。如果不存在山脈子數組,返回 0 。示例 1:輸入:arr = [2,1,4,7,3,2,5]
輸出:5
解釋:最長的山脈子數組是 [1,4,7,3,2],長度為 5。
示例 2:輸入:arr = [2,2,2]
輸出:0
解釋:不存在山脈子數組。思路:首先固定山峰值,然后分別尋找左、右半邊山脈的長度。A[left] < A[left+1],繼續向左尋找A[right] < A[right-1],繼續向右尋找 如果以當前山峰的山脈長度比最長山脈長,更新最長山脈。注意:我們可以在只有當前點為山峰的情況(即 A[i-1] < A[i] and A[i+1] < A[i]),才在左右尋找最長山峰,這樣可以大大降低搜索的次數。class Solution:def longestMountain(self, arr: List[int]) -> int:max_length = 0for i in range(1, len(arr)-1):left, right = i, iif arr[i] > arr[i - 1] and arr[i] > arr[i + 1]:while left - 1 >= 0 and arr[left] > arr[left-1]:left -= 1while right + 1 < len(arr) and arr[right] > arr[right + 1]:right += 1max_length = max(max_length, right-left + 1)return max_length
總結
以上是生活随笔為你收集整理的16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 14. Leetcode 80. 删除有
- 下一篇: [Solved] UnicodeDeco