Day1|數(shù)組理論基礎(chǔ),704.二分查找,27.移除元素

第一次用簡書,注冊登錄快捷,界面像oneNote。

數(shù)組理論基礎(chǔ)

第一時(shí)間想到的就是連續(xù)的一段空間,可以隨機(jī)訪問,添加刪除的時(shí)間復(fù)雜度是o(n),訪問,修改時(shí)間復(fù)雜度o(1) ,看了代碼隨想錄后覺得還能再補(bǔ)充一寫理論,知道但是不會(huì)立馬說出口的。

數(shù)組:連續(xù)空間上 相同數(shù)據(jù)類型集合

java中的二維數(shù)組不是連續(xù)的,類似拉鏈法的形狀


704.二分查找

原題:704.二分查找

雖然做過這道題,但是完全不會(huì)想到要用二分查找,思維有很大的開闊空間。

需要學(xué)習(xí)的:二分法的兩種寫法。[ ],[ )

關(guān)于 是否用<= ,<。邊界處理。訣竅在于帶入數(shù)值看是否是合法區(qū)間。

1.左閉右閉。

[1,1]是合法區(qū)間,所以在while時(shí),left=right是可以取到的,所以可以寫成while(left<=right)。

target<middle時(shí),right應(yīng)該換成middle,但這里需要考慮是middle還是middle-1。顯然閉區(qū)間middle是可以取到且已知middle>target了,所以新的right不應(yīng)該包含middle這個(gè)值,即right = middle - 1;

target>middle時(shí),left應(yīng)該換成middle+1。?

2.左閉右開

[1,1)不合法,left=right不能取到,while(left<right)

target<middle時(shí),right應(yīng)該換成middle,但這里需要考慮是middle還是middle-1。顯然開區(qū)間middle是不可以取到的,所以新的right可以包含middle這個(gè)值,即right = middle ;

target>middle時(shí),同理閉區(qū)間可以取到,left應(yīng)該換成middle+1


關(guān)于取中間值,自己實(shí)現(xiàn)的時(shí)候用的是(L+R)/ 2 ,且自己實(shí)現(xiàn)的時(shí)候不能通過,評論區(qū)有人指出這樣會(huì)造成整型溢出,減法則不會(huì)??梢越邮艿臏p法是 L+ (R-L)/2.


27.移除元素

原題:27.移除元素

只能想到暴力解法。

nums.erase是o(n)的算法。這里雙指針也是o(n)

需要學(xué)習(xí)的:雙指針。 數(shù)組的元素不能被刪除,只能覆蓋。因?yàn)閿?shù)組所占的區(qū)域已經(jīng)分給它了,而且是連續(xù)的,不能刪除單個(gè)元素。

快慢指針原地修改值。原理是慢指針記錄數(shù)組的長度,快指針遍歷數(shù)組記錄需要更新的數(shù)值,當(dāng)數(shù)值等于val(需要移除的元素)時(shí),則不往新的數(shù)組里加入。

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

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

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