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;
}
}