Lintcode60 Search Insert Position 題解

【題目描述】

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You may assume NO duplicates in the array.

給定一個(gè)排序數(shù)組和一個(gè)目標(biāo)值,如果在數(shù)組中找到目標(biāo)值則返回索引。如果沒(méi)有,返回到它將會(huì)被按順序插入的位置。你可以假設(shè)在數(shù)組中無(wú)重復(fù)元素。

【題目鏈接】

www.lintcode.com/en/problem/search-insert-position/

【題目解析】

這道題目基本上就是對(duì)標(biāo)準(zhǔn)二分查找的細(xì)微修改,主要考察對(duì)于細(xì)節(jié)和邊界情況的考慮把握。

由于查找的是一個(gè)特定的位置,并且要在這個(gè)位置插入Target,并且保證新的序列仍然是有序的,不妨來(lái)看看給出的樣例,分析一下具體的規(guī)則:

[1,3,5,6], 2 → 1,這是最為普通的情況,由于1<2<3,直接插入在1和3的中間即可。

[1,3,5,6], 5 → 2,這是已經(jīng)存在了相同數(shù)字的情況,在這種情況下,應(yīng)當(dāng)插入到相同的數(shù)字之前。

[1,3,5,6], 7 → 4,這是比所有數(shù)字都大的情況,插入到序列的最后

[1,3,5,6], 0 → 0,這是比所有數(shù)字都小的情況,插入到序列的開(kāi)始

綜上所述,我們可以得出這樣的結(jié)論:

如果Target < nums[0],即比所有數(shù)都小,則 Ans = 0

否則,Ans = max{i | nums[i] < Target} + 1,即“最大的小于Target的數(shù)”之后。

對(duì)于第一種情況,我們可以輕松判斷,而對(duì)于第二種情況,我們的問(wèn)題就變成了如何尋找“最大的小于Target的數(shù)”。

不妨用q(l, r)表示nums[l..r]中“最大的小于Target的數(shù)”,那么我們最終的答案就可以用q(0, size - 1) + 1來(lái)表示。

而q(l, r)的求解可以用這樣的方式來(lái)進(jìn)行計(jì)算:

不妨設(shè) m = (l + r + 1) / 2,此時(shí):

如果 nums[m] < target,則“最大的小于Target的數(shù)”至少是nums[m],由于nums[l..m-1]均小于nums[m],所以可以知道l..m-1都不可能是答案(不可能是最大的),即q(l, r) = q(m, r)

如果 nums[m] >= target,由于nums[r]>nums[r-1]>...>..>nums[m]>=target,可知m..r均不可能為答案(不小于Target),即q(l, r) = q(l, m - 1)

在這樣的處理過(guò)程中,我們每次可以將問(wèn)題的規(guī)??s小一半,所以最終我們一定會(huì)遇到一個(gè)問(wèn)題q(l, r)滿足l=r,此時(shí)我們就很容易知道,q(l, r)=l,則這也就是之前的所有問(wèn)題的答案。

【參考答案】

www.jiuzhang.com/solutions/search-insert-position/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評(píng)論 0 33
  • B樹(shù)的定義 一棵m階的B樹(shù)滿足下列條件: 樹(shù)中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子。 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有m...
    文檔隨手記閱讀 13,661評(píng)論 0 25
  • 《機(jī)械制圖》10%(50+30=80) 單項(xiàng)選擇題 Q-B1-E-001 L 基本幅面不能滿足需要而采用加長(zhǎng)幅面時(shí)...
    開(kāi)源時(shí)代閱讀 4,358評(píng)論 1 1
  • 4. Median of Two Sorted Arrays We can use the method that...
    Morphiaaa閱讀 459評(píng)論 0 0
  • 關(guān)于什么是財(cái)富的前提條件這個(gè)定義,小黑和小白的議見(jiàn)發(fā)生了分歧。為此展開(kāi)了討論。 小白: 我認(rèn)為人類的所有財(cái)富,都是...
    李洪戎閱讀 419評(píng)論 0 2

友情鏈接更多精彩內(nèi)容