算法与数据结构

1.有一个排完序的数组a[n],有一个数字b,求a[n]中大于b的最小值。

思路:二分法搜索

function findIndex(a,b){
       int left = 0;
       int right = a.length() - 1;
       if(b>a[right]){
             return -1;
       }
       while(left < right){
             int mid = left + right /2;
             if(b<=a[mid]){(注意<=)因为会存在相等的元素
                     right = mid;
             }else 
            {
                     left = mid+1;(注意需加一)
            }
       }
       return left;
}        

2.有一个存在有环的单向链表,找到环开始的初始位置。

思路:有a,b两个指针,b指针的速度为a指针的两倍直到两指针相遇。让某指针继续行走,计数,直到再相遇,得到环的大小。让两指针回到原点,一指针走环大小距离。停止,两指针同时出发,相遇点则为初始位置。

3.对一个单向链表进行复制,可能有环,可能无环。

 

posted @ 2018-03-24 16:01  bounce  阅读(162)  评论(0编辑  收藏  举报