2210. Count Hills and Valleys in an Array LeetCode Solution
In this guide, you will get 2210. Count Hills and Valleys in an Array LeetCode Solution with the best time and space complexity. The solution to Count Hills and Valleys in an Array problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Count Hills and Valleys in an Array solution in C++
- Count Hills and Valleys in an Array solution in Java
- Count Hills and Valleys in an Array solution in Python
- Additional Resources
Problem Statement of Count Hills and Valleys in an Array
You are given a 0-indexed integer array nums. An index i is part of a hill in nums if the closest non-equal neighbors of i are smaller than nums[i]. Similarly, an index i is part of a valley in nums if the closest non-equal neighbors of i are larger than nums[i]. Adjacent indices i and j are part of the same hill or valley if nums[i] == nums[j].
Note that for an index to be part of a hill or valley, it must have a non-equal neighbor on both the left and right of the index.
Return the number of hills and valleys in nums.
Example 1:
Input: nums = [2,4,1,1,6,5]
Output: 3
Explanation:
At index 0: There is no non-equal neighbor of 2 on the left, so index 0 is neither a hill nor a valley.
At index 1: The closest non-equal neighbors of 4 are 2 and 1. Since 4 > 2 and 4 > 1, index 1 is a hill.
At index 2: The closest non-equal neighbors of 1 are 4 and 6. Since 1 < 4 and 1 < 6, index 2 is a valley.
At index 3: The closest non-equal neighbors of 1 are 4 and 6. Since 1 < 4 and 1 1 and 6 > 5, index 4 is a hill.
At index 5: There is no non-equal neighbor of 5 on the right, so index 5 is neither a hill nor a valley.
There are 3 hills and valleys so we return 3.
Example 2:
Input: nums = [6,6,5,5,4,1]
Output: 0
Explanation:
At index 0: There is no non-equal neighbor of 6 on the left, so index 0 is neither a hill nor a valley.
At index 1: There is no non-equal neighbor of 6 on the left, so index 1 is neither a hill nor a valley.
At index 2: The closest non-equal neighbors of 5 are 6 and 4. Since 5 4, index 2 is neither a hill nor a valley.
At index 3: The closest non-equal neighbors of 5 are 6 and 4. Since 5 4, index 3 is neither a hill nor a valley.
At index 4: The closest non-equal neighbors of 4 are 5 and 1. Since 4 1, index 4 is neither a hill nor a valley.
At index 5: There is no non-equal neighbor of 1 on the right, so index 5 is neither a hill nor a valley.
There are 0 hills and valleys so we return 0.
Constraints:
3 <= nums.length <= 100
1 <= nums[i] <= 100
Complexity Analysis
- Time Complexity: O(n)
- Space Complexity: O(1)
2210. Count Hills and Valleys in an Array LeetCode Solution in C++
class Solution {
public:
int countHillValley(vector<int>& nums) {
int ans = 0;
int left = nums[0];
for (int i = 1; i + 1 < nums.size(); ++i)
if (left < nums[i] && nums[i] > nums[i + 1] || // the hill
left > nums[i] && nums[i] < nums[i + 1]) { // the valley
++ans;
left = nums[i];
}
return ans;
}
};
/* code provided by PROGIEZ */
2210. Count Hills and Valleys in an Array LeetCode Solution in Java
class Solution {
public int countHillValley(int[] nums) {
int ans = 0;
int left = nums[0];
for (int i = 1; i + 1 < nums.length; ++i)
if (left < nums[i] && nums[i] > nums[i + 1] || // the hill
left > nums[i] && nums[i] < nums[i + 1]) { // the valley
++ans;
left = nums[i];
}
return ans;
}
}
// code provided by PROGIEZ
2210. Count Hills and Valleys in an Array LeetCode Solution in Python
class Solution:
def countHillValley(self, nums: list[int]) -> int:
ans = 0
left = nums[0]
for i in range(1, len(nums) - 1):
if (left < nums[i] and nums[i] > nums[i + 1] or # the hill
left > nums[i] and nums[i] < nums[i + 1]): # the valley
ans += 1
left = nums[i]
return ans
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.