Während ich die Frage zu Leetcode gelöst habe, die besagt, dass in einem gegebenen Array von ganzen Zahlen, die in nicht absteigender Reihenfolge sortiert sind, die Start- und Endposition eines bestimmten Zielwerts ermittelt werden soll. Daher war es unmöglich, den Anfang und das Ende eines Zielelements in einem Array mit einem einfachen binären Scan zurückzugeben, da nur der Index zurückgegeben wird, an dem das erste Zielelement gefunden wurde, bei dem es sich um den Anfang, das Ende oder die Mitte dieses Elements handeln kann. Also verwenden wir Double Binary Scarch und hier erfahren Sie, wie es geht ...
Erste Binärsuche:
Zweite Binärsuche:
Ergebnis zurückgeben:
Zeitkomplexität:
Weltraumkomplexität:
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 } }
Das obige ist der detaillierte Inhalt vonWie verwende ich Advanced Binary Scarch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!