blog

코드 무작위 추출기 알고리즘 부트캠프 | 704: 이분법 조회 27: 요소 제거하기

이진 검색\n주제에 대한 링크: 이진 검색\n이진 검색은 매우 기본적인 알고리즘이며, 어려움은 주로 경계의 제어, 즉 카드 형제 [왼쪽, 오른쪽]과 [왼쪽, 오른쪽)의 두 가지 아...

Oct 23, 2025 · 2 min. read
シェア

이분법 검색

이분법은 매우 기본적인 알고리즘 사고이며, 어려움은 주로 경계의 제어, 즉 카드 형제 [왼쪽, 오른쪽]과 [왼쪽, 오른쪽]의 두 가지 아이디어의 차이에 있습니다. 처음으로 자신의 시간을 쓸 때도이 문제를 무시하고 오른쪽 = len (nums)-1을 사용하면 제출 프로세스에서 nums 1의 길이가 검색 조건을 직접 건너 뛰고 오류를보고하는 것으로 나타났습니다. 결국 수정되었습니다:

열린 간격 쓰기

 def search(self, nums: List[int], target: int) -> int:
 left = 0
 right = len(nums)
 while left < right:
 mid = left + (right - left)//2 #여기 중간= (left + right)//2  
 if nums[mid] > target:
 right = mid
 elif nums[mid] < target:
 left = mid + 1
 else:
 return mid
 return -1

닫힌 간격 쓰기

def search(self, nums: List[int], target: int) -> int:
 left = 0
 right = len(nums)-1
 while left <= right:
 mid = left + (right - left)//2
 if nums[mid] > target:
 right = mid-1
 elif nums[mid] < target:
 left = mid + 1
 else:
 return mid
 return -1

제목 링크:Binary Search

제목 링크:

34. 정렬된 배열에서 요소의 첫 번째와 마지막 위치 찾기

이분법으로 왼쪽과 오른쪽 경계를 각각 구합니다.

35. 삽입 위치 검색

차이점은 목표 값을 찾을 수 없는 경우 반환되는 값에 있습니다.

요소 제거하기

확장 문제 34, 35

폭력적인 솔루션

폭력적인 솔루션은 두 번, 한 번은 중복 값을 찾기 위해 한 번은 값을 삭제하기 위해 중복 값을 삭제하는 것을 잊지 않고 목록의 모든 요소의 중복 값을 삭제하는 것을 잊지 않으므로 이때 i의 위치는 아직 값을 찾지 못하고 i -= 1이 값을 건너 뛰지 않도록 보장합니다.

 def removeElement(self, nums: List[int], val: int) -> int:
 l = k = len(nums)
 i = 0
 while i < l:
 if nums[i] == val:
 k-=1
 for j in range(i,l-1):
 nums[j] = nums[j+1]
 i-=1
 l-=1
 i+=1
 return k

듀얼 포인터

 def removeElement(self, nums: List[int], val: int) -> int:
 slow = fast = 0
 while fast < len(nums):
 if nums[fast] == val:
 fast += 1
 else:
 nums[slow] = nums[fast]
 fast += 1
 slow += 1
 return slow
Read next

Docker의 기본 용어는 무엇인가요?

다음은 기본적인 Docker 용어에 관한 몇 가지 일반적인 용어입니다. 이미지: Docker 이미지는 코드, 런타임, 라이브러리, 환경 변수 및 구성 파일을 포함하여 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 패키지입니다.

Oct 23, 2025 · 2 min read