劍指offer:旋轉陣列的最小數字
題目描述
把一個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。
NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
題目解析:
暴力遍歷找最小,肯定不是想要考察我們的方式,如何讓步驟更少呢?
本題和二分查詢一樣,用兩個指標分別指向第一個元素和最後一個元素。
找到中間的元素。
1)如果中間元素位於前面的遞增子陣列,那麼它應該大於等於左邊指標指向的元素。此時陣列中最小的元素應該位於該中間元素的後面。可以把左指標指向中間,這樣可以縮小尋找的範圍。
2)如果中間元素位於後面的遞增子陣列,那麼它應該小於或等於右邊的指標指向的元素。將右指標指向中間位置。此時最小元素位於應該中間元素的左邊。
3.接下來我們再用更新之後的兩個指標,重複做新一輪的查詢。
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length == 0){
return 0;
}
int left = 0;
int right = array.length -1;
int mid = left;
while( array[left] >= array[right] ){
if(right - left == 1) {
return array[right];
}
mid = left + (right-left)/2;
if((array[left] == array[mid]) && (array[left]==array[right])&& (array[right]==array[mid])){
return minNum(array,left,right);
}
if( array[mid] >= array[left] ){
left = mid;
} else if(array[mid] <= array[right]){
right = mid;
}
}
return array[mid];
}
public static int minNum(int [] arr,int left,int right){
int min = arr[left];
for(int i = left+1; i<= right; i++){
if(arr[i] < min){
min = arr[i];
}
}
return min;
}
}
相關文章
- 劍指offer 旋轉陣列的最小數字陣列
- 【劍指offer】7.旋轉陣列的最小數字陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 【劍指offer】旋轉陣列的最小值陣列
- 劍指offer-轉陣列的最小數字-php陣列PHP
- (python版)《劍指Offer》JZ06:旋轉陣列的最小數字Python陣列
- 【劍指offer】把陣列排成最小的數陣列
- 劍指offer面試題11:旋轉陣列的最小數字(Java版已在牛客網AC)面試題陣列Java
- 0二分查詢簡單 牛客NC.71旋轉陣列的最小數字 leetcode劍指 Offer 11. 旋轉陣列的最小數字陣列LeetCode
- 劍指Offer-34-把陣列排成最小的數陣列
- 劍指offer——把陣列排成最小的數C++陣列C++
- 力扣 - 劍指 Offer 45. 把陣列排成最小的數力扣陣列
- 劍指Offer--陣列中重複的數字陣列
- 《劍指offer》:[51]陣列中的重複數字陣列
- 劍指Offer-把陣列中的數排成一個最小的數陣列
- 【劍指offer】數字在排序陣列中出現的次數排序陣列
- 《劍指offer》:[38]數字在排序陣列中出現的次數排序陣列
- 劍指Offer-39-數字在排序陣列中出現的次數排序陣列
- 劍指OFFER-數字在升序陣列中出現的次數(Java)陣列Java
- 劍指 Offer 56 - I. 陣列中數字出現的次數陣列
- 《劍指Offer》- 連續子陣列的最大和或最小和陣列
- 劍指offer之列印超過陣列一半的數字陣列
- 劍指offer 陣列中只出現一次的數字陣列
- 劍指 offer(1) -- 陣列篇陣列
- 我請大家來刷題:旋轉陣列的最小數字陣列
- 面試:Java 實現查詢旋轉陣列的最小數字面試Java陣列
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 《劍指offer》:[40]陣列中只出現一次的數字陣列
- 【劍指offer】陣列中只出現一次的數字(1)陣列
- 【劍指offer】陣列中只出現一次的數字(2)陣列
- 【劍指offer】陣列中的逆序對陣列
- 《劍指offer》:[41]陣列中和為S的兩個數陣列
- [劍之offer] 03 陣列中重複的數字陣列
- 旋轉陣列中的最小元素陣列
- 劍指offer之順序列印陣列陣列
- 【劍指offer】調整陣列順序陣列