leetcode 刷题(一)
新计划编程入门
数组&字符串
山脉数组的顶峰索引
难度:普通
给定一个长度为 n 的整数 山脉 数组 arr ,其中的值递增到一个 峰值元素 然后递减。返回峰值元素的下标。你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。
示例 1:
输入:arr = [0,1,0]
输出:1示例 2:
输入:arr = [0,2,1,0]
输出:1示例 3:
输入:arr = [0,10,5,2]
输出:1方法一
1
2
3
4
5
6
7
8
9class Solution(object):
def peakIndexInMountainArray(self, arr):
"""
:type arr: List[int]
:rtype: int
"""
for i in range(len(arr)):
if arr[i]>arr[i+1]:
return i复杂度分析
时间复杂度:O(n),其中 n 是数组 arr 的长度。我们最多需要对数组 arr 进行一次遍历。
空间复杂度:O(1)。方法二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class Solution(object):
def peakIndexInMountainArray(self, arr):
"""
:type arr: List[int]
:rtype: int
"""
n = len(arr)
left, right, ans = 1, n - 2, 0
while left <= right:
mid = (left + right) // 2
if arr[mid] > arr[mid + 1]:
ans = mid
right = mid - 1
else:
left = mid + 1
return ans复杂度分析
时间复杂度:O(logn),其中 n 是数组 arr 的长度。我们需要进行二分查找的次数为 O(logn)。
空间复杂度:O(1)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QXA!
评论