제안이 도착했습니다. 친구를 찾아 픽업하세요! 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
复制代码
원본 제목 링크
당신의 지원은 나의 가장 큰 동기입니다