6 求旋轉陣列的最小數字

2021-08-17 15:46:53 字數 870 閱讀 5348

旋轉陣列:把陣列的前一部分放到陣列的末尾,稱為旋轉陣列

eg:陣列【3,4,5,1,2】為陣列[1,2,3,4,5]的旋轉陣列。

輸入乙個(非遞減)陣列的乙個旋轉陣列,求該陣列的最小元素,若陣列大小為0,返回0

普通解法:遍歷陣列,求取陣列的最小元素,時間複雜度o(n),不作解釋,不貼**了

二分查詢法:時間複雜度為o(logn),下面對二分查詢的方法進行說明。

1、利用left,right,mid記錄三個下標,left始終為左半部分有序陣列的下標,right始終為右半部分有序陣列的下標。

2、利用迴圈,不斷利用mid=left+(right-left)/2來更新陣列的邊界left,right。

3、迴圈終止條件:left+1 = right;此時的最小數為array[right],在陣列的右側,如上例上right=3,array[right] = 1

4、考慮兩種特殊情況

(一)給定陣列為原陣列,即[1,2,3,4,5],直接返回array[0]

(二)給定的陣列為此種型別[2,2,2,1,2,2,2,2,2,2],即array[left]=array[mid]=array[right],最小的數既可能在左半部分陣列,也可能在右半部分陣列,對此種情況,直接進行順序遍歷查詢即可。

**如下:

int minnumberinrotatearray(vectorarray)

return array[right];

}int find(vector&array,int left,int right) //順序查詢輔助函式

{int temp = array[left];

for(int i =left+1 ; i <= right;i++)

{if(array[i]

求旋轉陣列的最小數字

package com.study 求旋轉陣列的最小數字 設定 輸入遞增排序陣列的乙個旋轉 要求返回最小的數 public class suanfa6 private static int arr private static int arr private static int arr priva...

6 旋轉陣列 的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。演算法 逐個遍歷,時間複雜度為o n 空間複雜度為o 1 class so...

6 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。解法1 開始沒有get到這個題目的點,個人感覺旋轉後,遍歷到第乙個...