關於演算法不斷優化的樂趣

2021-08-01 01:35:17 字數 651 閱讀 1416

看了一道很常規的演算法題,要求計算陣列中,相加為0的3個數,當然還有相加為0的4個數(以後看了再寫),因為要在乙個一維陣列中尋找3個數,首先想到暴力搜尋,演算法複雜度為o(n^3),於是想到,先對陣列排序,複雜度為o(nlogn),遠小於o(n^3),然後實現了通過兩邊夾的思路實現了演算法,但是在leetcode上執行後,發現執行時間比別人提交的平均值還要高,也就是說,演算法沒有進行優化,因此看了他們的答案,對比自己的演算法,發現的確有很多無用的計算,因此對**稍加改造,就使得自己的演算法執行速度到了top10%,因此以後演算法寫完了,還要不斷的完善,修改,整理,總結,總結這類演算法題的模板:

vector> threesum(vector&nums)

else if (sum > 0)

else ;

res.push_back(tmp);

while (low < high && nums[low] == tmp[1]) low++; // 避免重複計算

while (low < high && nums[high] == tmp[2]) high--;

}while (first + 1 < nums.size() && nums[first + 1] == nums[first]) first++; // 避免重複計算}}

return res;

}

免費玩轉疊倉鼠,體驗不斷合成的樂趣

手遊近些年越來越火,不僅是好玩還有人玩手游成了氪金大戶。但是能大筆氪金的畢竟是少數人,很多人玩遊戲還是有趣,更願意選擇免費或者花點小錢就可以玩的手遊。今天小編就給大家分享一下疊倉鼠的體驗情況,這款不氪金也能玩的很舒服的小遊戲。和傳統消除 合成遊戲不同,疊倉鼠走的是 2048 那種合成放置類路線。遊戲...

關於演算法優化理論。

同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是度量演算法執行的時間長短 而空間複雜度是度量演算法所需儲存空間的大小。乙個演算法執行所耗費的時間,從理論上是不能...

關於tarjan演算法的空間優化

最近隨著對tarjan演算法理解的加深,我發現用另外一種途徑實現tarjan的方法,且可以省去dfn陣列,大大節省了空間。經過大量測試,已經無誤。以下將分階段闡述進行優化的過程。第一階段 下面來說一下我做出此優化的思路。設任意兩個節點為u,v。縱觀整個tarjan演算法,我們發現,dfn陣列被呼叫的...