關於整型while(left<=right)類二分法的新發現。
阿新 • • 發佈:2021-01-24
關於整型while(left<=right)類二分法的新發現。
做“最少攔截系統”這道題時看到一個二分解法http://www.myexceptions.net/c/1805037.html。
題解看了很長時間沒怎麼看懂,最後研究了下while(l<=r)這類二分法,才發現其實核心思想很簡單而且精妙。
先說結論:(底附一個while(left<=right)類整型二分模板)
從小到大排序對下標進行二分搜尋,沒有找到精確答案(A[i]==a),退出迴圈時:
1.必然是right在左,left在右,left=right+1的情況。
2.若答案不在首尾:left是剛好(第一個)大於目標的下標,right是剛好(最後一個)小於目標的下標,拿陣列A:2 4 6 8 10舉例,對7搜尋,A[left]必然是8,A[right]必然是6,即A[left]=8剛好大於7,A[right]=6剛好小於7。
while(l<=r)
{
mid=(l+r)/2;
if(f[mid]==a)
{
l=mid;
break;
}
else if(f[mid]<a)
l=mid+1;
else
r=mid-1;
}