求取列表“峰与谷”

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

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 结语

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


目录
相关文章
|
8月前
|
传感器 编解码 人工智能
中科星图——MCD43A4 V6天底双向反射率分布函数调整反射率(NBAR)数据集
中科星图——MCD43A4 V6天底双向反射率分布函数调整反射率(NBAR)数据集
187 8
|
8月前
最大流圆桌问题(二分图多重匹配问题)
最大流圆桌问题(二分图多重匹配问题)
66 0
|
8月前
|
Java
leetcode-452:用最少数量的箭引爆气球
leetcode-452:用最少数量的箭引爆气球
77 0
|
7月前
|
存储 算法 测试技术
力扣经典150题第五十题:用最少数量的箭引爆气球
力扣经典150题第五十题:用最少数量的箭引爆气球
36 0
|
8月前
|
数据可视化 前端开发 SEO
R语言门限误差修正模型(TVECM)参数估计沪深300指数和股指期货指数可视化
R语言门限误差修正模型(TVECM)参数估计沪深300指数和股指期货指数可视化
|
机器学习/深度学习 传感器 算法
融合黄金正弦和随机游走的哈里斯鹰优化算法(GSHHO)-附matlab代码
融合黄金正弦和随机游走的哈里斯鹰优化算法(GSHHO)-附matlab代码
|
算法
ArcGIS:如何利用站点数据(例如臭氧)进行克里金插值得到连续臭氧表面?
ArcGIS:如何利用站点数据(例如臭氧)进行克里金插值得到连续臭氧表面?
170 0
|
BI 定位技术
|
算法 C++
【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!
【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!
143 0
leetcode 452用最少数量的箭引爆气球
leetcode 452用最少数量的箭引爆气球
93 0
leetcode 452用最少数量的箭引爆气球