Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4
5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
題目大意:假設一個數組以升序排序,然後這個數組可能以某個數組爲軸做了旋轉,找出旋轉後的數組的最小值。
首先需要去寫一個判斷特殊情況的,比如如果數組中只有一個數字或者這個數組並沒有旋轉,設置一個變量res,使其等於Nums[0]。要找到最小的值,可以從數據的分佈來看,因爲數組以某個數字爲軸旋轉,並且數組是升序的,如果在數組中突然出現一個數字小於前面的數字,那麼這個數字本來應該是排在最前面的,即最小的,所以只需要返回這個數字即可。代碼:
int res=nums[0];
for(int i=0;i<nums.length-1;i++){
if(nums[i]>nums[i+1]){
res = nums[i+1];
return res;
}
}
return res;
用這種方法效率還可以:
、
也可以對數組進行排序,然後選擇排序後的第一個數字,就是最小的,但是這樣效率很低:
Arrays.sort(nums);
return nums[0];