나는 주어진 정수 배열에서 비감소 순서로 정렬되어 주어진 목표 값의 시작 위치와 끝 위치를 찾는 leetcode에 대한 질문을 해결하는 동안. 따라서 단순 바이너리 스카치를 사용하여 배열에서 대상 요소의 시작과 끝을 반환하는 것은 불가능했습니다. 왜냐하면 해당 요소의 첫 번째, 끝 또는 중간이 될 수 있는 첫 번째 대상 요소를 찾은 인덱스만 반환하기 때문입니다. 그래서 우리는 Double Binary Scarch를 사용하는데, 그 방법은 다음과 같습니다...
첫 번째 이진 검색:
두 번째 이진 검색:
반품 결과:
시간 복잡도:
공간 복잡성:
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 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 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 } }
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3