私が leetcode の質問を解いている間に、降順ではない整数の指定された配列で、指定されたターゲット値の開始位置と終了位置を見つけます。したがって、単純なバイナリ スカーチでは、配列内のターゲット要素の開始と終了を返すことは不可能でした。これは、最初のターゲット要素が見つかったインデックスのみを返すためであり、その要素の first 、 end 、または middle のいずれかになる可能性があります。そこで Double Binary Scharch を使用します。その方法は次のとおりです...
最初の二分探索:
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 } }
以上がAdvanced Binary Scharch の使用方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。