package com.joker.counts;
/**
* 二分法的原理爲找到中間數,進行比較
* @author Joker
*2018年10月11日 下午5:03:10
*/
public class BinaryCount {
public static void main(String[] args) {
int [] counts = new int[100];
int k = 0;
for(int i = 0;i<100;i++){
k+=3;
counts[i] = k;
}
System.out.println(getOrderIndex(counts, 36));
}
/**
* 二分法的使用是有前提的,那就是需要有目標數組本身就是有序的。
* 二分法查找的時間複雜度是log2n
* @param counts
* @param target
* @return
*/
public static int getOrderIndex(int[] counts,int target){
int lower = 0;
int higher = counts.length-1;
while(lower<=higher){
int middler = (higher+lower)/2;
//目標大於中間數,將查找範圍的下限變爲middle後面的一個元素
if(counts[middler]<target){
lower = middler+1;
//目標小於中間數,將查找範圍的上限變爲middle前面的一個元素
}else if(counts[middler]>target){
higher = middler-1;
}else{
return middler;
}
}
return -1;
}
}