作者:
wawi2 (@@)
2021-07-11 23:30:11這題就是ans沒弄好 邏輯沒甚麼大錯
然後根據我刷Binary Search的經驗
while(left<=right) 條件中如果有 = 的話
最好在while迴圈裡面加個條件處理if (left == right)的情況
刷久了你就知道多加一個if會幫助你脫離無窮迴圈
不然就是改用while (left < right)
然後要注意while裡面一定要更新left或right值
不然left跟right同時都不變的話 也是無窮迴圈
兩個小技巧擇一使用即可 包你遇到任何binary search都不會搞成無窮迴圈
經驗分享~~ 祝您早日進FAANG
※ 引述《Kuba4ma ()》之銘言:
: https://i.imgur.com/gsNoiha.png
: https://i.imgur.com/ZRff8qC.png
: Leetcode 744. Find Smallest Letter Greater Than Target
: 一樣的code在 leetcode 上執行和在 VScode 執行上結果不同
: 自己trace過一遍覺得應該沒問題
: 是有 bug 嗎? 還是.....?
: vector<char> letters = {'c' ,'f', 'j'};
: char ans;
: char target = 'k';
: int left = 0;
: int right = letters.size()-1;
: while(left<=right){
: int m = left+(right-left)/2;
: if(letters[m]>target){
: ans = letters[m];
: right = m-1;
: }
: else if(letters[m]<=target)
: left = m+1;
: }
: if(ans>target)
: cout<<ans<<endl;
: else
: cout<<letters[0]<<endl;