演算法題目之對症下藥(一)

2021-10-06 13:09:43 字數 1406 閱讀 3819

在演算法題目中,對於不同型別的題目多多少少都有相對應的較為高效的資料結構和演算法,這也是體現程式設計師價值所在的地方。

這篇文章想分享的鍊錶題目是題幹**現煉表求倒數第k個的題目。

鍊錶的特點(區別於陣列)即是不連續儲存,沒有下標,所以不能直接獲得想要的第幾個元素,而必須從頭遍歷到想要的位置才能取到對應位置的內容,它的優點是增刪比陣列來得快,因為可以直接將某乙個結點插入到乙個鍊錶中或者從乙個鍊錶中刪除,而不涉及到大量資料的移動。因此在程式設計中,如果增刪比較頻繁,我們應該優先考慮鍊錶;而查改比較多的,我們應該優先考慮陣列

然而演算法題目是不會輕易讓你好過的,它就是要反其道而行之,有鍊錶的題目一般都會要你拿到第幾個或者倒數第幾個元素,那麼怎麼才能讓自己的演算法顯得高效一些呢?有的同學可能會想,既然他反著來,那我們就將鍊錶先轉成陣列,然後跟運算元組一樣去操作它不就完成了嗎?雖然這是可行的,但是卻顯示出了自己程式設計上的不靈活,怎麼他一搞成鍊錶你就一定要轉成陣列呢?這不就暴露出你對鍊錶不熟了嗎?

如果題目是找到鍊錶的第幾個元素,相信大家也不會從頭將鍊錶轉成陣列了吧。直接外設乙個計數器,遍歷乙個加乙個,加到k直接返回即可,如果遇到鍊錶長度小於k,則返回-1或者null即可。

那如果是查詢倒數第幾個呢?

對於有鍊錶並且是查詢倒數第幾個的演算法題目,快慢指標演算法可以說是比較高效的

題目如下:

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

這是劍指offer的一道演算法題目,類似變形的題目還有輸入乙個有序鍊錶,找到鍊錶中第k大的元素等

快慢指標就像兩兄弟,快指標先行一步,慢指標等著快指標的訊息行事。既然是倒數第k個,那我們就讓快指標走到最後乙個,而慢指標則是我們想要的那個結果,這麼一來,慢指標與快指標的距離就是k,這就像快指標與慢指標之間有一條長為k的線,由快指標拉著慢指標走,這樣一來,我們的演算法只要保證快指標比慢指標快k個位置,快指標走到鍊錶結尾則慢指標就是滿足要求的結點

這種演算法的時間複雜度為o(n), **實現如下:

public

class

solution

if(k >0)

return null;

else

return slow;

}}

題目如下:

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

對於這道題我的解法類似於快排:從後往前找奇數,從前往後找偶數,將前面的偶數與後面的奇數交換,當前後兩個指標相遇時即已經完成要求

public

class

solution

}

對症下藥,營銷沒那麼難

咱們都知道,不同的產品,營銷手段都不一樣。那怎麼才能給產品制定乙個合適營銷方案呢?最近,李叫獸在文章裡說,其實營銷策略就是說服使用者做出購買決策。想要說服人,就得知道咱們大腦是怎麼做決策的。大腦有兩個決策系統 乙個是衝動的 短期的 容易受 的系統,主要是皮質下的原始大腦,它反應迅速 充滿動力,但渴望...

對症下藥解決簡歷五大病症

病症1 一頁紙簡歷 大行其道 病症2 盛裝簡歷成潮流 對症下藥 為簡歷扮靚也要分職位,比如會計 硬體工程師等強調嚴謹性的職位,需要的是樸素的簡歷,而有的廣告公司在簡歷設計上動動腦筋是有必要的。病症3 極盡誇張之能事 對症下藥 遇到那種毫無缺點的人,我們反而不敢用,因為我們不知道公司還能教他些什麼。一...

聊天記錄恢復?對症下藥,恢復超輕鬆!

我們經常會在一些情況下誤刪了我們手機裡的微信聊天記錄,但是很多人都不知道其實誤刪了也沒事,是可以恢復回來的,也不知道恢復的方法,所以下面就給程式設計客棧大家介紹一下微信www.cppcns.com聊天記錄刪了怎麼恢復?各種手機版本的方法都有!聊天記錄恢復 方法1 recover恢復 英文狀態下輸入 ...