寻找峰值【刷题记录】及range使用说明

导读:本篇文章讲解 寻找峰值【刷题记录】及range使用说明,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一 、题目描述:

山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。
假设 nums[-1] = nums[n] = -∞。
示例
输入:[2,4,1,2,7,8,4]
返回值:5

二、 思路:优化!!

若从右往左遍历,当下标index处的值不是峰值时,其必满足

在这里插入图片描述

,所以当检测index-1处是否为峰值时只需要与左边的值进行比较。
在这里插入图片描述

需要注意的是:

1,寻找的是最大的索引,不是最大值的索引 2,右边没有值也算峰(也就是第一个判断返回)

减少循环次数
1、 最后一个值是符合的直接返回
2、 有峰值时要跳,因为有峰值的下一个必定不是峰值
3、 从索引1开始到倒数时第二个索引

三、解题代码

class Solution:
    def solve(self , a ):
        # write code here
        ##倒序遍历
        for i in range(len(a)-1, -1, -1):
            # a[i] > a[i-1] 即为最大索引峰值
            if a[i] > a[i-1]:
                return i
        # 如果没有则返回数组最后位的索引
        return len(a)-1

或者

class Solution:
    def solve(self , a ):
        # write code here
        if len(a) ==0:
            return -1
        i = len(a) - 1
        while i < len(a):
            if (a[i] >= a[i-1]):
                return i
                #break
            else:
                i = i - 1

注: range(len(a)-1, -1, -1)为从最大索引峰值步长为1倒着遍历到-1结束

复杂度分析
1 时间复杂度O(N):N表示数组的长度,遍历一遍数组时间O(N)

2\空间复杂度O(1):仅使用常数级变量空间

range使用说明:

range(start, stop[, step])
参数说明: start: 计数从 start 开始。默认是从 0 开始。

例如

range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。

range(0, 5) 是[0, 1, 2, 3, 4]没有5, step:步长,默认为1。

range(0, 5) 等价于 range(0, 5, 1)

range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(1, 11) # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

range(0, 30, 5) # 步长为 5
[0, 5, 10, 15, 20, 25]

range(0, 10, 3) # 步长为 3
[0, 3, 6, 9]

range(0, -10, -1) # 负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

range(0)
[]

range(1, 0)
[]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99765.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!