semasa saya menyelesaikan soalan pada leetcode yang mengatakan dalam tatasusunan Diberi nombor integer yang diisih dalam susunan tidak menurun, cari kedudukan permulaan dan penamat bagi nilai sasaran yang diberikan. jadi adalah mustahil untuk mengembalikan permulaan dan penamat elemen sasaran dalam tatasusunan dengan scarch binari mudah kerana ia hanya mengembalikan indeks di mana ia menjumpai elemen sasaran pertama yang boleh menjadi apa sahaja yang pertama, akhir atau tengah elemen itu. jadi kami menggunakan Double Binary Scarch , dan inilah cara untuk melakukannya ...
Carian Perduaan Pertama:
Carian Binari Kedua:
Keputusan Pulangan:
Kerumitan Masa:
Kerumitan Angkasa:
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 } }
Atas ialah kandungan terperinci Bagaimana untuk menggunakan Advanced Binary Scarch ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!