標籤:

剛開始做leetcode上的題,可以輸出正確結果,但總是超時,怎麼解決?

大學剛畢業,最近比較閑,對編程又比較感興趣,就決定開刷leetcode。做了兩三道題,在自己的電腦上運行都可以得出正確結果,但提交後總是提示 超時。

大學學c和c++時,基本只管得出結果就好,沒怎麼考慮過演算法複雜度的問題,對這個東西沒什麼概念。就是在網上搜到的leetcode答案,也只是感覺 比我的演算法高效。

因此,想要提高,有什麼推薦書目或者什麼其他什麼知識學習嗎?


正經的去學一下演算法和數據結構

然後多練...第一次遇到題目沒見過自己多想,實在沒想通看討論區也是一種提高,但是一定要吃透

其實可以順便看看cracking the code interview


很多時候,Leetcode上的題都有一個簡單直觀的解題思路,比如這道題(121. Best Time to Buy and Sell Stock,買賣股票的最佳時機)

題目是:給出一個數組表示每日股價,要求找出買入和賣出最好的時機,使得利潤最大,輸出最大利潤。必須先低價買,再高價賣,找最大收益。

比如:Input: [7, 1, 5, 3, 6, 4]

Output: 5

最大利潤為在Input[1]=1時買入,在Input[4]=6時賣出。

常見想法是:先選擇所有數中最大和最小的,然後判斷是否可行,如果不可行就嘗試次大和次小的數字,演算法時間複雜度為O(N^2)

如果學過演算法導論,利用動態規劃,每次讀一個數據,刷新最低值和最大利潤。時間複雜度是O(N),空間複雜度是O(1)

寫代碼本身是很容易的事情。Leetcode上更多的是挑戰優化的極限。我的Leetcode是xiaoxiaoyao ,我的GITHUB是xiaoxiaoyao (lake.lai)歡迎一起學習


ISBN

9787302197973

9787115308108

9787111350392

9787111407010

9787115179289


我寫的演算法,nodejs版總是比Java版要快,一放到leetcode上,nodejs版慢出翔了……


兩個推薦,一是點擊discuss進入該題的討論頁面,選擇most vote 看看評分最高的幾個解,揣摩揣摩,過兩天再刷該題.二是買紫書去學習


學數據結構唄,這個明顯是優化演算法的問題,你用的演算法可能時間複雜度太高了


上次做了一個題,有一個test case居然有十頁word文檔,所以說如果測試樣例很大,演算法很容易超時


推薦題主先系統的學習下數據結構和演算法,可以找個公開課的視頻邊看邊學,推薦清華大學鄧俊輝老師的~自己看書有些地方實在是看著費勁


那說明你要麼是brute force,大數據的時候就超時了;或者在某些corner case的時候你陷入死循環了,看錯誤提示,是哪個case出問題了,然後修改你的代碼,或者看discussion是否複雜度有問題。


推薦閱讀:

Unreal4有哪些令你印象深刻拍案叫絕的設計?
為什麼傳遞函數指針而不是函數本身?

TAG:編程 | C | LeetCode |