LeetCode845:数组中的最长山脉

目录

一、题目

二、示例

三、思路

四、代码


一、题目

我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:

  • B.length >= 3
  • 存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]
  • (注意:B 可以是 A 的任意子数组,包括整个数组 A。)

给出一个整数数组 A,返回最长 “山脉” 的长度。

如果不含有 “山脉” 则返回 0。

二、示例

示例 1:

输入:[2,1,4,7,3,2,5]
输出:5
解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。

示例 2:

输入:[2,2,2]
输出:0
解释:不含 “山脉”。

提示:

  • 0 <= A.length <= 10000
  • 0 <= A[i] <= 10000

三、思路

  • 第一步,找到山峰,即最高点
  • A[i]是山峰,l,r为山峰的左右两端,他们满足:A[i - 1] < A[i] and A[i] > A[i + 1]
  • 第二步,沿着山峰分别向左、向右找符合条件的
  • while l > 0 and A[l - 1] < A[l]:
  • l -= 1
  • while r < len(A) - 1 and A[r + 1] < A[r]:
  • r += 1

四、代码

class Solution:def longestMountain(self, A):""":type A: List[int]:rtype: int"""if len(A) <= 2:return 0maxlen = 0# 找到山峰,即最高点for i in range(1, len(A) - 1):if A[i - 1] < A[i] and A[i] > A[i + 1]:l = i - 1r = i + 1while l > 0 and A[l - 1] < A[l]:l -= 1while r < len(A) - 1 and A[r + 1] < A[r]:r += 1maxlen = max(maxlen, r - l + 1)return maxlenif __name__ == '__main__':test = [2,1,4,7,3,2,5]s = Solution()ans = s.longestMountain(test)print(ans)

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部