산술 하위 배열

1999 단어 theabbieleetcodedsa
일련의 숫자가 적어도 두 개의 요소로 구성되고 모든 두 개의 연속 요소 간의 차가 동일한 경우 산술이라고 합니다. 보다 공식적으로 시퀀스 s는 모든 유효한 s[i+1] - s[i] == s[1] - s[0]에 대해 i인 경우에만 산술 연산입니다.

예를 들어 다음은 산술 시퀀스입니다.

1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9

다음 순서는 산술이 아닙니다.

1, 1, 2, 5, 7
n 정수 배열, numsm 정수 배열 두 개(각각 lr )가 제공되어 m 범위 쿼리를 나타냅니다. 여기서 ith 쿼리는 범위입니다. [l[i], r[i]] . 모든 배열은 인덱스가 0입니다.
boolean개 요소의 목록을 반환합니다.

예 1:

입력: 숫자 = answer , l = answer[i] , r = true출력: nums[l[i]], nums[l[i]+1], ... , nums[r[i]]설명:
0번째 쿼리에서 하위 배열은 [4,6,5]입니다. 이것은 산술 수열인 [6,5,4]로 재배열될 수 있습니다.
첫 번째 쿼리에서 하위 배열은 [4,6,5,9]입니다. 이것은 산술 수열로 재정렬할 수 없습니다.
두 번째 쿼리에서 하위 배열false은 산술 시퀀스인 [4,6,5,9,3,7]로 재정렬할 수 있습니다.

예 2:

입력: 숫자 = [-12,-9,-3,-12,-6,15,20,-25,-20,-15,-10], l = [0,1,6,4,8, 7], r = [4,4,9,7,9,10]
출력: [거짓,참,거짓,거짓,참,참]

제약:
  • [0,0,2]
  • [2,3,5]
  • [true,false,true]
  • [5,9,3,7]. This
  • [3,5,7,9]
  • n == nums.length
  • m == l.length

  • 해결책:

    from collections import Counter
    
    class Solution:
        def isAP(self, arr):
            n = len(arr)
            if n == 1:
                return True
            arr = Counter(arr)
            a = min(arr)
            b = max(arr)
            d = (b - a) // (n - 1)
            if d == 0 and len(arr) == 1:
                return True
            for i in range(n):
                if arr[a + i * d] != 1:
                    return False
            return True
    
        def checkArithmeticSubarrays(self, nums: List[int], l: List[int], r: List[int]) -> List[bool]:
            n = len(l)
            return [self.isAP(nums[l[i]:r[i]+1]) for i in range(n)]
    

    좋은 웹페이지 즐겨찾기