生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法:二分法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在有序數(shù)組中,查找某個(gè)數(shù)是否在數(shù)組中存在? 使用二分法最經(jīng)典。算法復(fù)雜度為(logN).
public static boolean exist(int[] sortedArr
, int num
){if(sortedArr
== null || sortedArr
.length
== 0){return false;}int L = 0;int R = sortedArr
.length
- 1;int mid
= 0; while(L<R){mid
= L + ((R-L) >> 1); if(sortedArr
[mid
] == num
){return true;}else if(num
< sortedArr
[mid
] ){R = mid
-1;}else{L = mid
+ 1;}}return sortedArr
[L] == num
;}
在一個(gè)有序數(shù)組中,找到 >= 某個(gè)數(shù)最左側(cè)的位置。
public static int nearLeft(int[] arr
, int value
){int L= 0;int R = arr
.length
- 1;int index
= -1;while(L<=R){int mid
= L + ((R-L) >> 1);if(arr
[mid
] >= value
){index
= mid
;R = mid
-1;}else{L = mid
+ 1;}}return index
;}
找到 <= value最右側(cè)的位置
public static int nearRight(int[] arr
, int value
){int L= 0;int R = arr
.length
- 1;int index
= -1;while(L<=R){int mid
= L + ((R-L) >> 1);if(arr
[mid
] > value
){R = mid
-1;}else{index
= mid
;L = mid
+ 1;}}return index
;}
找到局部最小值
public static int getLessIndex(int[] arr
){if(arr
== null || arr
.length
== 0){return -1;}if(arr
.length
== 1 || arr
[0]<arr
[1]){return 0;}if(arr
[arr
.length
-1] < arr
[arr
.length
-2]){return arr
.length
- 1;}int left
= 1;int right
= arr
.length
- 2;int mid
= 0;while(left
< right
){mid
= (left
+ right
)/2;if(arr
[mid
] > arr
[mid
-1]){right
= mid
-1;}else if(arr
[mid
]>arr
[mid
+1]){left
= mid
+ 1;}else{return mid
;}}return left
;}
總結(jié)
以上是生活随笔為你收集整理的数据结构与算法:二分法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。