Menu
CoddyTech

Search in Rotated Sorted Array

رُتّبت قائمة من الأعداد الصحيحة المتميزة بترتيب تصاعدي، ثم دُوّرت: نُقلت بعض العناصر من المقدمة، وقد يكون عددها صفرًا، إلى النهاية بالترتيب نفسه. على سبيل المثال، تدوير [2, 5, 8, 11, 15, 19, 23] بمقدار 4 ينتج عنه [15, 19, 23, 2, 5, 8, 11]. لديك القائمة المدورة nums والعدد الصحيح target. أعد فهرس target في nums، مع بدء العد من 0، أو -1 إذا لم يكن موجودًا، في زمن O(log n).

الدالة

search(nums: integer-array, target: integer) → integer
numsinteger-array
القائمة المُدوَّرة المرتبة من أعداد صحيحة متميزة
targetinteger
القيمة التي يجب البحث عنها
تُرجعinteger
فهرس target في nums، أو ‎-1‎ إذا لم يكن موجودًا

القيود

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • جميع القيم في nums مختلفة.
  • nums قائمة متزايدة دُوّرت بمقدار ما k بحيث 0 ≤ k < nums.length؛ وتبقى دون تدوير عندما تكون k = 0.

أمثلة

المدخلات
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
المخرجات
4
الشرح
العنصر الأوسط الأول، عند الفهرس 3، يحتوي على 2، لذا فإن النصف الأيمن [2, 5, 8, 11] مرتب ويحتوي على 5. العنصر الأوسط التالي، عند الفهرس 5، يحتوي على 8؛ والجزء الأيسر المرتب [5, 8] يحتوي على 5، ما يؤدي إلى الفهرس 4.
challenge icon

سؤال إضافي

إذا كان من الممكن أن تحتوي nums على قيم مكررة، فلا يمكن لأي خوارزمية أن تضمن O(log n). هل يمكنك إثبات ذلك باستخدام قائمة مُدوَّرة من قيم 1 تخفي قيمة 0 واحدة؟

إعادة ضبط الشيفرة
def search(nums, target):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

nums = [15, 19, 23, 2, 5, 8, 11]
target = 5

الإخراج المتوقع

4