把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。
牛客網ac**:
class solution
int left = 0,right = rotatearray.size()-1;
if(rotatearray[left] < rotatearray[right])
return rotatearray[left];
while(1)}};
程式設計**如下:
#includeusing namespace std;
//找出旋轉陣列最小值
int min(int arr,int l,int r);
//找出旋轉陣列最小值
int mininorder(int* numbers, int index1, int index2);
int min_2(int* numbers, int index1,int index2);
int main();
cout
catch(const char *s)
while(j-i != 1)
return arr[j];
}int mininorder(int* numbers, int index1, int index2)
return result;
}int min_2(int* numbers, int index1,int index2)
catch(const char *s)
// 如果下標為index1、index2和indexmid指向的三個數字相等,
// 則只能順序查詢
indexmid = (index1 + index2) / 2;
if(numbers[index1] == numbers[index2] && numbers[indexmid] == numbers[index1])
return mininorder(numbers, index1, index2);
// 縮小查詢範圍
if(numbers[indexmid] >= numbers[index1])
index1 = indexmid;
else if(numbers[indexmid] <= numbers[index2])
index2 = indexmid;
}return numbers[indexmid];
}
執行結果如下:
劍指offer 面試題11 旋轉陣列的最小數字
完整 位址 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。這道題目相對前面的比較複雜,坑比較多 此時用二分法解決,mi...
《劍指offer》面試題11 旋轉陣列的最小數字
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列為的乙個旋轉,該陣列的最小值為1。分析 我們注意到旋轉之後的陣列實際上可以劃分為兩個排序的子陣列,而且前面子陣列的元素都大於或者等於後面子陣列的元素。和二分查詢...
劍指offer 面試題11 旋轉陣列中的最小數字
時間複雜度o logn 解題思路 1.旋轉陣列是兩段遞增的序列,如果 中間元素 左端元素 右端元素 從前到後遍歷元素 如果中間元素 左端元素 最小值在第二段,更新左端指標,如果中間元素 左端元素 中間元素 右端元素 最小值在第一段,更新右邊的指標。public static void main st...