求取列表“峰与谷”

简介: 求取列表“峰与谷”

1 引言

       本题来源于力扣周赛的第一题,目的是通过独特的算法加上简单的编程解决问题。

2 问题描述

  给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ,则下标 i nums 中,某个峰的一部分。类似地,如果两侧距 i 最近的不相等邻居的值均大于 nums[i] ,则下标 i nums 中某个谷的一部分。对于相邻下标 i j ,如果 nums[i] == nums[j] , 则认为这两下标属于 同一个 峰或谷。
注意,要使某个下标所做峰或谷的一部分,那么它左右两侧必须 都 存在不相等邻居。
返回
nums 中峰和谷的数量。
示例
1
输入:
nums = [2,4,1,1,6,5]
输出:3
解释:
在下标
0 :由于 2 的左侧不存在不相等邻居,所以下标 0 既不是峰也不是谷。
在下标
1 4 的最近不相等邻居是 2 1 。由于 4 > 2 4 > 1 ,下标 1 是一个峰。
在下标
2 1 的最近不相等邻居是 4 6 。由于 1 < 4 1 < 6 ,下标 2 是一个谷。
在下标
3 1 的最近不相等邻居是 4 6 。由于 1 < 4 1 < 6 ,下标 3 符合谷的定义,但需要注意它和下标 2 是同一个谷的一部分。
在下标
4 6 的最近不相等邻居是 1 5 。由于 6 > 1 6 > 5 ,下标 4 是一个峰。
在下标
5 :由于 5 的右侧不存在不相等邻居,所以下标 5 既不是峰也不是谷。
共有
3 个峰和谷,所以返回 3

3 算法描述

本题解题的思路在于判断列表内数据的特点,我们根据题目的描述可以知道峰与谷的特点(峰:一个元素比前一个和后一个元素大)(谷:一个元素比前一个元素和后一个元素小)。通过前面两个特点我们就可以通过循环进行判断,但我们还需要注意的一点是峰值的元素可以跟后一个元素一样,谷值的特点也可以和后一个元素一样。同时因为这道题目的特殊性,我们还需要对列表中相邻的两个元素进行去重。

4 代码

def wz():
   num = []
   for x in range(len(nums) - 1):
       if nums[x] != nums[x + 1]:
           num.append(nums[x])
   num.append(nums[-1])
   n = 0
   for i in range(1, len(num) - 1):
       if (num[i] > num[i - 1] and num[i] >= num[i + 1]) or (num[i] < num[i - 1] and num[i] <= num[i + 1]):
           n += 1
       else:
           n += 0
   return n


nums = [5, 7, 7, 1, 7]
print(wz())


5 结语

通过对题目的判定,想到最简单的方法,再加以实现,这才是编程的魅力。


目录
打赏
0
0
0
0
14
分享
相关文章
|
11月前
|
leetcode-452:用最少数量的箭引爆气球
leetcode-452:用最少数量的箭引爆气球
97 0
力扣经典150题第五十题:用最少数量的箭引爆气球
力扣经典150题第五十题:用最少数量的箭引爆气球
59 0
R语言面板数据回归:含时间固定效应混合模型分析交通死亡率、酒驾法和啤酒税
R语言面板数据回归:含时间固定效应混合模型分析交通死亡率、酒驾法和啤酒税
“智慧的车,聪明的路”距离市场还有多远?
随着油价连续上涨,新能源汽车再次迎来利好。在能够蚕食燃油车市场的“历史机遇”面前,新能源车却玩起了涨价。这并不是新能源“傲娇”,而是主战场已经开始悄悄转换,从堆料砸性价比,迈向了智能化升级的路。 在这一波军备竞赛中,车联网无疑是一个可操作的、能立竿见影提升产品力的、能迅速拉开与燃油车代差的选项。
【数论】蚂蚁感冒、饮料换购、买不到的数目
长 100 厘米的细长直杆子上有 n只蚂蚁。
116 0
leetcode 452用最少数量的箭引爆气球
leetcode 452用最少数量的箭引爆气球
105 0
leetcode 452用最少数量的箭引爆气球
人形机器人火了,距离我们还有多远?
随着“擎天柱”的推出,让人形机器人这一新兴赛道引起市场的广泛关注,这是否就意味着人形机器人商业化的开启呢?
183 0
人形机器人火了,距离我们还有多远?
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等