(LeetCode 每日一题) 2210. 统计数组中峰和谷的数量 (数组)
题目:2210. 统计数组中峰和谷的数量
思路:数组,时间复杂度0(n)。
可以先遍历一遍数组nums,进行去重操作,然后再判断,这样需遍历两遍。
而下面是遍历一遍的做法。
C++版本:
class Solution {
public:int countHillValley(vector<int>& nums) {int ans=0;// 记录左边最近的数int l=nums[0];for(int i=1;i+1<nums.size();i++){int cur=nums[i],r=nums[i+1];// 去重if(cur==r) continue;// 和左边的数不等,且同时大于或小于两边的数if(l!=cur && ((l<cur) == (cur>r) )) ans++;// 维护左边的数l=cur;}return ans;}
};
JAVA版本:
class Solution {public int countHillValley(int[] nums) {int ans=0;int l=nums[0];for(int i=1;i+1<nums.length;i++){int cur=nums[i],r=nums[i+1];if(cur==r) continue;if(l!=cur && ((l<cur) == (cur>r) )) ans++;l=cur;}return ans;}
}
GO版本:
func countHillValley(nums []int) int {l,ans:=nums[0],0for i:=1;i+1<len(nums);i++ {cur,r:=nums[i],nums[i+1]if cur==r {continue}if l!=cur && ((l<cur)==(cur>r)) {ans++}l=cur}return ans
}