1.时间空间复杂度的意义
评价一个算法的好坏有两种方式,事后统计法和事前估算分析法。
事后统计法需要两边算法执行完成所需要的时间,如果算法过于复杂,消耗的时间不仅多,还会受到硬件的影响,不够准确。
事前统计法(如大O表示法等)可以快速准确地计算出算法的效率,防止在问题规模扩大的时候,出现算力不足等意外。
2.对二分法算法的比较
二分查找:
在有序数组a中,查找目标target; 找到返回索引,找不到返回-1;
public static int binarySearchBasic(int [] a,int target){
//1.确定查找范围索引,i为数组开头,j为数组结尾
int i =0,j=a.length-1;
//2.确定查找范围内是否存在数组值
while (i<=j){
//3.确定中间索引,如果为奇数则向下取整,不用除以2,因为int溢出
int m = (i+j)>>>1;
//4.比较中间值与目标值的大小
if(target<a[m]){
j=m-1;
} else if (a[m]<target) {
i=m+1;
}else{
//5.比较相等,查找结束
return m;
}