Menu
CoddyTech

Find Minimum in Rotated Sorted Array

רשימה של מספרים שלמים שונים ממוינת בסדר עולה ואז עברה סיבוב: מספר כלשהו של איברים, אולי אפס, נלקחו מההתחלה והועברו לסוף באותו סדר. לדוגמה, סיבוב של [2, 5, 9, 11, 13, 15, 17] ב־3 מקומות יוצר את [11, 13, 15, 17, 2, 5, 9]. נתונה לך הרשימה המסובבת nums. החזר את הערך הקטן ביותר בה בזמן O(log n).

פונקציה

findMin(nums: integer-array) → integer
numsinteger-array
הרשימה הממוינת המסובבת של מספרים שלמים שונים
מחזירהinteger
הערך הקטן ביותר ב־nums

אילוצים

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i] ≤ 104
  • כל הערכים ב־nums שונים זה מזה.
  • nums היא רשימה עולה שסובבה ב־k כלשהו, כאשר 0 ≤ k < nums.length; k = 0 משאיר אותה ללא סיבוב.

דוגמאות

קלט
nums = [11, 13, 15, 17, 2, 5, 9]
פלט
2
הסבר
הערכים עולים מ־11 ל־17 ואז יורדים ל־2, שבו מתחילה הריצה השנייה. החיפוש רואה ש־17 > 9 באינדקס 3, ולכן המינימום נמצא מימינו; ואז 5 ≤ 9 ו־2 ≤ 5 מזיזים את hi בחזרה עד שהטווח מצטמצם לאינדקס 4 בלבד, שבו נמצא 2.

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

challenge icon

שאלת המשך

האם אפשר להחזיר את הערך ה־k הקטן ביותר של nums בזמן O(log n), בלי למיין אותו?

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

מקרה 1

מקרה 2

מקרה 3

קלט

nums = [11, 13, 15, 17, 2, 5, 9]

צפוי

2