to meimei,
二分查找是常见的一种查找方式,即:对有序的序列,每次查找先比较中间位置mid=(left+right)/2是否为所找元素
,是则结束查找,否则分别遍历左右半边序列,直至找到目标。
时间复杂度为O(lgn)。
做过的一个笔试题:
2015去哪儿春季笔试题
一个递增数组如【1,2,3,4,5】可以右移 例如【3,4,5,1,2】
请设计一个函数int indexofArray(int []array, int target),如果target在数字中返回数组下标否则返回-1
思路:
一般思路为顺序找到交界处位置k,需要O(lgn),然后对k,k+1,n,1,...k-1进行二分查找,稍微变换下坐标即可。
我的思路为先用二分查找找到交界处,代码如下:
private static int fun(int[] a,int i,int j) {
if(a==null || a.length==0||i<0||j>=a.length){
return -1;
}
int half = (i+j)/2;
while(i<=j){
half = (i+j)/2;
if(a[half]<a[half+1]){
int m = fun(a,i,half-1);
int n = fun(a,half+1,j);
return m>0?m:n>0?n:-1;
}else{
return half;//返回有序序列的最大值位置
}
}
return -1;
}
再根据返回值,进行下一步的二分查找。
================================================
二叉树有以下分类
完全二叉树、满二叉树、平衡二叉树
(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排
布,这就是
二分查找是常见的一种查找方式,即:对有序的序列,每次查找先比较中间位置mid=(left+right)/2是否为所找元素
,是则结束查找,否则分别遍历左右半边序列,直至找到目标。
时间复杂度为O(lgn)。
做过的一个笔试题:
2015去哪儿春季笔试题
一个递增数组如【1,2,3,4,5】可以右移 例如【3,4,5,1,2】
请设计一个函数int indexofArray(int []array, int target),如果target在数字中返回数组下标否则返回-1
思路:
一般思路为顺序找到交界处位置k,需要O(lgn),然后对k,k+1,n,1,...k-1进行二分查找,稍微变换下坐标即可。
我的思路为先用二分查找找到交界处,代码如下:
private static int fun(int[] a,int i,int j) {
if(a==null || a.length==0||i<0||j>=a.length){
return -1;
}
int half = (i+j)/2;
while(i<=j){
half = (i+j)/2;
if(a[half]<a[half+1]){
int m = fun(a,i,half-1);
int n = fun(a,half+1,j);
return m>0?m:n>0?n:-1;
}else{
return half;//返回有序序列的最大值位置
}
}
return -1;
}
再根据返回值,进行下一步的二分查找。
================================================
二叉树有以下分类
完全二叉树、满二叉树、平衡二叉树
(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排
布,这就是