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
הסבר
5 נמצא באינדקס 4. האמצעי הראשון, אינדקס 3, מכיל 2, לכן החצי הימני [2, 5, 8, 11] הוא החלק הממויין, ו-5 נמצא בין 2 ל-11. האמצעי הבא, אינדקס 5, מכיל 8; החלק השמאלי הממויין [5, 8] מכיל את 5, מה שמוביל לאינדקס 4.

lock icon+23 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

אם nums עשוי להכיל כפילויות, שום אלגוריתם לא יכול להבטיח O(log n). האם אפשר להוכיח זאת? צרו רשימה מסובבת של 1-ים, ובתוכה 0 יחיד ומוסתר, כך שכל חיפוש אחר 0 יצטרך לקרוא כל איבר.

איפוס הקוד
def search(nums, target):
    # כתבו כאן קוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

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

צפוי

4