aboutsummaryrefslogtreecommitdiff
path: root/count_hills_valleys_arr.py
blob: 4c4c9e907e5d0bd4117c0b340caaf218c1d8f2d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 2210. Count Hills and Valleys in an Array
from itertools import groupby

"""
you are given a 0-indexed integer array 'nums'. an index 'i' is part of a
hill in 'nums' if the closest non-equal neighbours of 'i' are smaller than
'nums[i]'. similarly, an index 'i' is part of a valley in 'nums' if the
closest non-equal neighbours 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 neighbour on both the left and right of the index. return the
number of hills and valleys in 'nums'.
"""


class Solution(object):
    def countHillValley(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        a = [i for i, _ in groupby(nums)]
        return sum(l > m < r or l < m > r for l, m, r in zip(a, a[1:], a[2:]))


if __name__ == "__main__":
    obj = Solution()
    print(obj.countHillValley(nums=[2, 4, 1, 1, 6, 5]))
    print(obj.countHillValley(nums=[6, 6, 5, 5, 4, 1]))