二分搜索難點(diǎn)分析

  • 能使用二分搜索的前提是數(shù)組已排序密浑。
  • 二分查找的使用場(chǎng)景:(1)可轉(zhuǎn)換為find the first/last position of...(2)時(shí)間復(fù)雜度至少為O(lgn)戴陡。
  • 遞歸和迭代的使用場(chǎng)景:能用迭代就用迭代仆嗦,特別復(fù)雜時(shí)采用遞歸弃锐。
    Ref:https://algorithm.yuanbin.me/zh-hans/binary_search/binary_search.md

leetcode 374

We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.

Every time you guess wrong, I'll tell you whether the number is higher or lower.

You call a pre-defined API guess(int num) which returns 3 possible results (-1, 1, or 0):
-1 : My number is lower
1 : My number is higher
0 : Congrats! You got it!

Example:
n = 10, I pick 6.
Return 6.
public int guessNumber(int n) {
        int start = 1;
        int end = n;
        int mid;
        int tmp;
        while(start < end){
            mid = start/2 + end/2;
            tmp = guess(mid);
            if ( tmp == 0) return mid;
            else if ( tmp == 1){
                start = mid + 1;
            } else{
                end = mid - 1;
            }
        }
        return start;

    }

在上述程序中
mid = start/2 + end/2;
這里之所以這樣寫是防止兩數(shù)相加后溢出遏佣。
while(start < end)
循環(huán)判斷不取等號(hào)可以防止死循環(huán)白粉。
當(dāng)涉及數(shù)組時(shí)掩缓,我們經(jīng)常會(huì)發(fā)生數(shù)組越界的情況雪情,這種時(shí)候我們可以采取補(bǔ)項(xiàng)的思路。

定義 lower bound 為在給定升序數(shù)組中大于等于目標(biāo)值的最小索引你辣,upper bound 則為小于等于目標(biāo)值的最大索引.以lower bound為例:

public static int lowerBound(int[] nums, int target) {
        if (nums == null || nums.length == 0) return -1;
        int lb = -1, ub = nums.length;
        while (lb + 1 < ub) {
            int mid = lb + (ub - lb) / 2;
            if (nums[mid] < target) {
                lb = mid;
            } else {
                ub = mid;
            }
        }

        return lb + 1;
    }

這里我們采取巡通,使lb尘执,ub在數(shù)組邊界的兩端+1,而不是剛好等于數(shù)組邊界宴凉。
int lb = -1, ub = nums.length;

如果遇到有問插入索引的位置時(shí)誊锭,可以分三種典型情況:
1.目標(biāo)值在數(shù)組范圍之內(nèi),最后返回值一定是 lb + 1
2.目標(biāo)值比數(shù)組最小值還小弥锄,此時(shí) lb 一直為 -1 , 故最后返回 lb + 1 也沒錯(cuò)丧靡,也可以將 -1 理解為數(shù)組前一個(gè)更小的值
3.目標(biāo)值大于等于數(shù)組最后一個(gè)值,由于循環(huán)退出條件為 lb + 1 == ub , 那么循環(huán)退出時(shí)一定有 lb = A.length - 1 , 應(yīng)該返回 lb + 1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末籽暇,一起剝皮案震驚了整個(gè)濱河市温治,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戒悠,老刑警劉巖罐盔,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異救崔,居然都是意外死亡惶看,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門六孵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纬黎,“玉大人,你說我怎么就攤上這事劫窒”窘瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵主巍,是天一觀的道長(zhǎng)冠息。 經(jīng)常有香客問我,道長(zhǎng)孕索,這世上最難降的妖魔是什么逛艰? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮搞旭,結(jié)果婚禮上散怖,老公的妹妹穿的比我還像新娘。我一直安慰自己肄渗,他們只是感情好镇眷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翎嫡,像睡著了一般欠动。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惑申,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天具伍,我揣著相機(jī)與錄音铆遭,去河邊找鬼。 笑死沿猜,一個(gè)胖子當(dāng)著我的面吹牛枚荣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啼肩,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼橄妆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了祈坠?” 一聲冷哼從身側(cè)響起害碾,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赦拘,沒想到半個(gè)月后慌随,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躺同,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年阁猜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹋艺。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剃袍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捎谨,到底是詐尸還是另有隱情民效,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布涛救,位于F島的核電站畏邢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏检吆。R本人自食惡果不足惜舒萎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咧栗。 院中可真熱鬧逆甜,春花似錦虱肄、人聲如沸致板。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斟或。三九已至,卻和暖如春集嵌,著一層夾襖步出監(jiān)牢的瞬間萝挤,已是汗流浹背御毅。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怜珍,地道東北人端蛆。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像酥泛,于是被迫代替她去往敵國(guó)和親今豆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)柔袁。 張土汪:刷leetcod...
    土汪閱讀 12,745評(píng)論 0 33
  • 小金豬呆躲,雖然你已經(jīng)離開我和媽媽10幾天。但是我一直覺得你重來沒有離開過捶索。你在新的世界過得好不好插掂?你知道我們過得好不...
    小金豬的小情人閱讀 418評(píng)論 0 1
  • 記得少女時(shí)代看韓國(guó)電視劇《人魚小姐》辅甥,很羨慕殷雅麗英的廚藝,至今記得她的一句話:“做每一道菜燎竖,不管簡(jiǎn)單還是復(fù)雜肆氓,不...
    清淺光陰閱讀 389評(píng)論 0 0
  • 寫寫我麻麻吧葛超。 突然進(jìn)入養(yǎng)老期的十二月宙拉,也讓我跟二老多了很多相處的時(shí)間。與以往不同的是阎姥,身為大四老狗捐凭,所思所想都開...
    大大懶懶閱讀 296評(píng)論 0 0
  • 紙上字拨扶,兩三行,讀來終覺淺茁肠。望著窗外陰雨連綿患民,忽然間耳邊響起琵琶語的旋律,是母親在聽廣播垦梆。那首純音樂融入心里的一份...
    微光_36c4閱讀 482評(píng)論 0 1