最普通的二分
搜尋區間[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 那麼我...