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