二分查找法正确写法:
public static int binarysearch(int[] a,int start,int end,int k)
{
if(k>a[end])
return -1;
if(k<a[start])
return -1;
while(start<=end)
{
int mid = start+(end-start)/2;
if(a[mid]==k)
return mid;
else if(a[mid]>k)
end = mid-1;
else
start=mid+1;
}
return -1;
}
注意事项:
如果所搜索的k不在所给数组范围内,怎么办。
如果start和end的和溢出最大值怎么办。
要考虑[start,end]这种情况。就要start<=end才行。
判断链表循环:
// 判断链表中是否有环
public static boolean IsExitLoop(LinkList head)
{
LinkList pslow = head;
LinkList pfast = head;
while(pfast != NULL && pfast->next != NULL)
{
pslow = pslow->next; // 每次前进一步
pfast = pfast->next->next; // 每次前进二步
if(pslow == pfast) // 两个指针相遇,说明存在环
return true;
}
return false; // 没有环
}
如果链有环求环长度:
遍历链表,然后再数组中查询有没有相同的节点如果没有,则将该节点加入到数组中,如果有则链表环长度,等于相同节点中间节点的个数。