二分的細節

2021-09-27 02:02:48 字數 836 閱讀 1504

最普通的二分

搜尋區間[left , right]

每次搜尋mid後一分為二 [left , mid-1] 和[mid+1 , right]

出while迴圈條件 left=right+1

int binarysearch(int nums, int target) 

return -1;

}

搜尋左側邊界的二分
int left_bound(int nums, int target)  else if (nums[mid] < target)  else if (nums[mid] > target) 

}if(left == nums.length) return -1;

return nums[left]==target?left:-1;

}

尋找右側邊界的二分
int right_bound(int nums, int target)  else if (nums[mid] < target)  else if (nums[mid] > target) 

}if (right == 0) return -1;

return nums[right - 1]==target ? right-1 : -1; // 注意

}

右側邊界要減一,這是乙個特殊點,因為每次對left=mid+1更新

最後一次while迴圈後的nums[left]一定不等於target

返回 right-1(寫成left-1也一樣)

二分查詢細節問題

1.1 兩種實現 情況一 right nums.length int binary search int nums,int target else if nums mid target else if nums mid target 因為迴圈的結束條件是 left right,它們指向的元素未被判斷...

二分演算法的細節問題

尋找乙個數 尋找左側邊界 尋找右側邊界 需不需要帶 號 需不需要 1int binarysearch int nums,int target return 1 上面這段 中,可以發現while內的條件是 而不是 兩者有這樣的區別 符號區間返回條件 left,right left right 1 le...

E Packmen 貪心 二分 注意細節

這題雖然想到了貪心 二分,但是模擬細節wa到懷疑人生 因 為考 慮每個p 有兩種走 法,向左 走再向右 走因為考慮每個p有兩種走法,向左走再向右走 因為考慮每個 p有兩種 走法,向 左走再向 右走 或者向 右走再向 左走 或者向右走再向左走 或者向右走再 向左走 那 麼我 們先考慮 第乙個p 那麼我...