算法与数据结构
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.对一个单向链表进行复制,可能有环,可能无环。