網(wǎng)站 意義百度查重入口
文章目錄
- 1.樸素二分查找的升級版
- 2.查找左端點
- 3.查找右端點
- 4.代碼的編寫
1.樸素二分查找的升級版
和之前介紹的這個二分查找相比,我覺得這個區(qū)別就是我們的這個二分查找需要找到的是一個區(qū)間,而不是這個區(qū)間里面的某一個元素的位置;
2.查找左端點
1)首先就是我們的這個循環(huán)的條件:left<right;
2)其次就是我們的判斷的這個語句:
x<t,這個t就是我們的target目標值;這個時候和我們的樸素二分一樣,就是讓這個left=mid+1;
但是當這個x>=t的時候,我們不再是讓這個right=mid-1了,而是讓這個right=mid,因為這個時候是判斷的區(qū)間,所以這個mid可能就是我們想要的這個數(shù)值;;
3)之前我們確定這個mid的時候是這個+1或者是不+1都是可以的,因為當是偶數(shù)的時候,兩個情況下對應的這個數(shù)值都失敗可以幫助我們判斷的;
但是在這個里面,我們的終點求解的時候,就應該是這個不加1的版本才可以;
3.查找右端點
1)這個和上面的恰好是反過來的,無論是這個終點的求解,還是這個判斷和位置的變換,都是和上面的放過來;
上面的取等號的,我們下面的查找右端點就不用取等號,反之,如果上面沒取,我們這個就需要進行相等情況下的判斷;
2)其次就是這個里面的終點元素的判斷:
left+(right-left+1)/2和上面的也是不同的,上面的是不要+1的;
4.代碼的編寫
1)首先定義一個數(shù)組,里面的兩個元素都是-1,這個處理的就是我們的這個示例里面的第三種情況;
2)下面就是分別去查找我們的左端點和右端點,按照上面介紹的這個思路即可;
3)左端點:
left<right作為循環(huán)的條件;
mid求解的時候不需要+1的操作;
x<target對應的就是我們的left=mid+1;
x>=target對應的就是我們的mid=right;
return的時候其實這個left和right指向的就是一個位置,因此當我們往數(shù)組里面擱置的時候,left和right都是可以的;
4)下面的這個是右端點的判斷的邏輯代碼:
left<right作為我們的判斷的條件;
mid求解的時候需要加上1;
x<=target對應的這個left=mid;
x>target的時候,right=mid減去一;
這個找到端點之后,直接把這個下標放到我們的ret數(shù)組里面的第二個元素的位置即可;