leetcode 2216. 배열을 아름답게 만들기 위한 최소 삭제(python)

제안이 도착했습니다. 친구를 찾아 픽업하세요! 2022년 봄학기 채용 체크인 이벤트에 참여하고 있습니다. 자세한 이벤트 내용 을 보려면 클릭하세요.

설명하다

인덱스가 0인 정수 배열 숫자가 제공됩니다. 배열 nums는 다음과 같은 경우에 아름답습니다.

  • nums.length는 짝수입니다.
  • nums[i] != nums[i + 1] 모든 i % 2 == 0에 대해.

빈 배열은 아름다운 것으로 간주됩니다. nums에서 원하는 수의 요소를 삭제할 수 있습니다. 요소를 삭제하면 삭제된 요소의 오른쪽에 있는 모든 요소가 왼쪽으로 한 단위 이동하여 생성된 간격을 채우고 삭제된 요소의 왼쪽에 있는 모든 요소는 변경되지 않은 상태로 유지됩니다. 최소 요소 수를 반환합니다. 아름답게 만들기 위해 숫자에서 삭제합니다.

예 1:

Input: nums = [1,1,2,3,5]
Output: 1
Explanation: You can delete either nums[0] or nums[1] to make nums = [1,2,3,5] which is beautiful. It can be proven you need at least 1 deletion to make nums beautiful.
复制代码

메모:

  • 1 <= 숫자.길이 <= 10^5
  • 0 <= 숫자[i] <= 10^5

구문 분석

질문의 의미에 따라 인덱스가 0인 정수 배열 nums가 제공됩니다. 다음 조건이 충족되면 배열 nums가 아름답고 빈 배열도 아름다운 것으로 간주됩니다.

  • nums.length는 짝수입니다.
  • nums[i] != nums[i + 1] 모든 i % 2 == 0에 대해.

num에서 원하는 수의 요소를 제거할 수 있습니다. 요소가 제거되면 제거된 요소의 오른쪽에 있는 모든 요소가 왼쪽으로 한 단위 이동하여 생성된 간격을 채우고 제거된 요소의 왼쪽에 있는 모든 요소는 변경되지 않은 상태로 유지됩니다. 아름답게 만들기 위해 숫자에서 제거할 최소 요소 수의 배열을 반환합니다.

이 문제는 분명히 욕심 많은 알고리즘입니다. 가장 간단한 아이디어는 숫자를 왼쪽에서 오른쪽으로 순회하는 것입니다. 인덱스 i가 짝수이면 nums[i] == nums[i + 1], nums[i] 삭제, 따라서 결과에 1을 추가하고 인덱스 i에 1을 추가하고 숫자 순회를 계속합니다. 순회가 완료된 후 i는 N보다 작을 수 있습니다. 이는 인덱스 i 이후의 요소를 제거한 다음 결과에 Ni를 추가하고 마지막으로 결과를 반환해야 함을 의미합니다.

시간 복잡도는 O(N)이고 공간 복잡도는 O(1)입니다.

답변

class Solution(object):
    def minDeletion(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:return 0
        N = len(nums)
        i = 0
        result = 0
        while i < N-1:
            if nums[i] == nums[i+1]:
                result += 1
                i += 1
            else:
                i += 2
        if i < N:
            result += (N-i)
        return result
复制代码

작업 결과

114 / 114 test cases passed.
Status: Accepted
Runtime: 1696 ms
Memory Usage: 25.5 MB
复制代码

원본 제목 링크

leetcode.com/contest/wee…

당신의 지원은 나의 가장 큰 동기입니다

추천

출처juejin.im/post/7080315074857926686