배열의 언덕과 계곡 계산

2243 단어 theabbieleetcodedsa
인덱스가 0인 정수 배열nums이 제공됩니다. i의 가장 가깝지 않은 이웃이 nums보다 작은 경우 인덱스 inums[i]의 언덕의 일부입니다. 유사하게, 인덱스 inums의 가장 가깝지 않은 이웃이 i보다 큰 경우 nums[i]의 계곡의 일부입니다. 인접한 인덱스 ijnums[i] == nums[j] 인 경우 동일한 언덕 또는 계곡의 일부입니다.

인덱스가 언덕이나 계곡의 일부가 되려면 인덱스의 왼쪽과 오른쪽 모두에 동등하지 않은 이웃이 있어야 합니다.
nums 의 언덕과 계곡의 수를 반환합니다.

예 1:

입력: 숫자 = [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을 반환합니다.

예 2:

입력: 숫자 = [6,6,5,5,4,1]
출력: 0
설명:
인덱스 0에서: 왼쪽에 6의 동등하지 않은 이웃이 없으므로 인덱스 0은 언덕도 계곡도 아닙니다.
인덱스 1에서: 왼쪽에 6의 동등하지 않은 이웃이 없으므로 인덱스 1은 언덕도 계곡도 아닙니다.
인덱스 2에서: 5의 가장 가깝지 않은 이웃은 6과 4입니다. 5 < 6 및 5 > 4이므로 인덱스 2는 언덕도 계곡도 아닙니다.
인덱스 3에서: 5의 가장 가깝지 않은 이웃은 6과 4입니다. 5 < 6 및 5 > 4이므로 인덱스 3은 언덕도 계곡도 아닙니다.
인덱스 4에서: 4의 가장 가깝지 않은 이웃은 5와 1입니다. 4 < 5 및 4 > 1이므로 인덱스 4는 언덕도 계곡도 아닙니다.
인덱스 5에서: 오른쪽에 1과 같지 않은 이웃이 없으므로 인덱스 5는 언덕도 계곡도 아닙니다.
언덕과 계곡이 0개이므로 0을 반환합니다.

제약:
  • 3 <= nums.length <= 100
  • 1 <= nums[i] <= 100

  • 해결책:

    class Solution:
        def countHillValley(self, nums: List[int]) -> int:
            n = len(nums)
            groups = []
            i = 0
            while i < n:
                ctr = 1
                while i < n - 1 and nums[i] == nums[i + 1]:
                    i += 1
                    ctr += 1
                i += 1
                groups.append((nums[i - 1], ctr))
            ctr = 0
            m = len(groups)
            for i in range(1, m - 1):
                left = groups[i][0] > groups[i - 1][0]
                right = groups[i][0] > groups[i + 1][0]
                if not left ^ right:
                    ctr += 1
            return ctr
    

    좋은 웹페이지 즐겨찾기