6.5 旋轉陣列的最小數字(二分法:python,java實現)
阿新 • • 發佈:2019-01-09
題目:把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。
java版本:
例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
二分法查詢:
python版本:
# -*- coding:utf-8 -*- class Solution: def minNumberInRotateArray(self, rotateArray): length = len(rotateArray) if length == 0: return 0 if length == 1: return rotateArray[0] left, right = 0, length- 1 while left<= right: mid = (left+ right) >> 1 if rotateArray[mid] > rotateArray[right]: left = mid+ 1 elif rotateArray[mid] < rotateArray[right]: right = mid else: right -= 1 if left >= right: break return rotateArray[left]
java版本:
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { int len=array.length; int left=0; int right=len-1; if(len==0){ return 0; } if(len==1){ return array[0]; } else{ while(left<=right){ int mid = (left+ right) >> 1; if (array[mid] > array[right]){ left = mid+ 1; } else if (array[mid] < array[right]){ right = mid; } else{ right -= 1; } if (left >= right) break; } return array[left]; } } }
C#:從頭遍歷整個陣列,找出最小的數,時間複雜度為O(n);
class Solution { public int minNumberInRotateArray(int[] rotateArray) { // write code here while (rotateArray.Length ==0) return 0; //number存取旋轉陣列中的最小值,初始值為陣列第一個數 int number = rotateArray[0]; ; for (int i = 1; i <= rotateArray.Length - 1; i++) { if (number >= rotateArray[i]) { number = rotateArray[i]; } } return number; }