旋轉數組的最小數字(二分法查找)

1.二分法查找。

思想:假設數據是按升序排序的,對于給定值 x,從序列的中間位置開始比較,如果當前位置值等于 x,則查找成功;若 x 小于當前位置值,則在數列的前半段中查找;若 x 大于當前位置值則在數列的后半段中繼續查找,直到找到為止。

時間復雜度:遞歸O(log2n) ? 非遞歸O(log2n)

空間復雜度:遞歸O(log2n) ? 非遞歸O(1)

要求:必須是有序的序列,不重復。

代碼實現(java)

/** 二分法查找算法實現(非遞歸)

* 找到返回目標數字

* 未找到則返回-1

* Created by Darker on 15/7/17.

*/

public class TestA{

public static void ?main(String[]args){

inta[]={1,2,3,4,5,6};

System.out.println(findData(a,4));

}

public static int findData(int[]a,intx){

int start=0;

int end=a.length-1;

while(start<=end){

int middle=(start+end)/2;

if(x==a[middle]){

return a[middle];

}else

{

if(x

end=middle-1;

}else{

start=middle+1;

}

}

}

return-1;

}

}

2.接下來我們在繼續回到旋轉數組中最小值這個問題上面。什么是旋轉數組?書上的解釋是這樣的,將一個數組中的前面若干個元素,搬到數組的末尾,就是旋轉數組。直接上代碼看個明白。

public class TestA{

public static void main(String[]args){

inta[]={1,0,1,1,1,1};

System.out.println(findMinValue(a));

}/**

* 什么是旋轉數組,例如數組{3,4,5,1,2} 旋轉后變成{1,2,3,4,5}就是一個旋轉。

*

* */

public static int findMinValue(inta[]){

if(a.length!=0){

int start=0;

intend=a.length-1;

int middle=start;

while(a[start]<=a[end]){

if(end-start==1){

middle=end;

break;

}

middle=(start+end)/2;

if(a[start]==a[end]&&a[middle]==a[start])

return minInOrder(a,start,end);

if(a[middle]>=a[start]){

start=middle;

}else if(a[middle]<=a[end]){

end=middle;

}

}

return a[middle];

}else{

return-1;

}

}

/**

* 順序查找

* */

public static int minInOrder(int a[],int start,int end){

int result=a[start];

for(inti=start+1;i<=end;i++){

if(result<=a[i])

result=a[i];

}

return result;

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,779評論 0 33
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,554評論 0 17
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 日子還是一天天的過,一小時的,一分一秒的在漫步走著。時間聽説是一個Conceptual (概念性)的存在。原始人只...
    FrankFL閱讀 188評論 0 0