أثناء قيامي بحل السؤال على 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