1. 程式人生 > >領釦(LeetCode)尋找旋轉排序陣列中的最小值 個人題解

領釦(LeetCode)尋找旋轉排序陣列中的最小值 個人題解

假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

請找出其中最小的元素。

你可以假設陣列中不存在重複元素。

示例 1:

輸入: [3,4,5,1,2]
輸出: 1

示例 2:

輸入: [4,5,6,7,0,1,2]
輸出: 0



這題拿到手發現很簡單。。實際上也的確比較簡單。我以為會挖個什麼坑在等我,但是隻要使用遍歷陣列的辦法找到下一個值比上一個小的地方,輸出後值就是答案。
這樣做的時間複雜度是O(n)。在LeetCode的評測中,使用JAVA打敗了62%的人,使用C打敗了100%的人 XD
同時,我以為是題目設定問題,去度娘了一下,發現了還有二分的做法,使用二分做法也完成了,時間複雜度是O(logn),但是在這題的測試環境中反而比遍歷的做法要慢。
附上兩種做法程式碼:

 1 class Solution {
 2     public int findMin(int[] nums) {
 3         int ans=0;
 4         for (int i=0;i<nums.length;i++)
 5         {
 6             if(nums[i+1]<nums[i])
 7                 ans = nums[i+1];
 8         }
 9         return ans;
10     }
11 }
 1 class Solution {
 2     public
int findMin(int[] nums) { 3 int low=0; 4 int high=nums.length-1; 5 int mid; 6 while(low<high) 7 { 8 mid=(low+high)/2; 9 if(nums[mid]>nums[high]) 10 low=mid+1; 11 else if(nums[mid]<nums[high]) 12
high=mid; 13 } 14 return nums[low]; 15 } 16 }