내가 감소하지 않는 순서로 정렬된 주어진 정수 배열에서 주어진 목표 값의 시작 위치와 끝 위치를 찾는 leetcode에 대한 질문을 해결하는 동안. 따라서 단순 바이너리 스카치를 사용하여 배열에서 대상 요소의 시작과 끝을 반환하는 것은 불가능했습니다. 왜냐하면 해당 요소의 첫 번째, 끝 또는 중간이 될 수 있는 첫 번째 대상 요소를 찾은 인덱스만 반환하기 때문입니다. 그래서 우리는 Double Binary Scarch를 사용하는데, 그 방법은 다음과 같습니다...
첫 번째 이진 검색:
2차 이진 검색:
반품 결과:
시간 복잡도:
공간 복잡성:
class Solution { public int[] searchRange(int[] nums, int target) { int ei = nums.length - 1; int si = 0; int[] res = {-1, -1}; // Initialize result array // First binary search to find the last occurrence while (si <= ei) { int mid = si + (ei - si) / 2; if (target < nums[mid]) { ei = mid - 1; } else if (target > nums[mid]) { si = mid + 1; } else { res[1] = mid; // Update end index si = mid + 1; // Search in the right half } } // Reset the pointers for the second binary search si = 0; ei = nums.length - 1; // Second binary search to find the first occurrence while (si <= ei) { int mid = si + (ei - si) / 2; if (target < nums[mid]) { ei = mid - 1; } else if (target > nums[mid]) { si = mid + 1; } else { res[0] = mid; // Update start index ei = mid - 1; // Search in the left half } } return res; // Return the result array } }
위 내용은 고급 바이너리 Scarch를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!