今天在刷leetcode的時候,有道題需要編碼拼接字串的時候,我用來遞迴的方式,結果發現耗時和空間占用很恐怖,後面用迴圈實現,頓時快了n倍。。
下面是**:
// 遞迴實現拼接字串
string hebing
(vector strs,
int left,
int right)
return
hebing
(strs, left,
(left + right)/2
)+hebing
(strs,
(left + right)/2
+1, right);}
string encode
(vector
& strs)
return
hebing
(strs,
0, strs.
size()
-1);
}// 迴圈實現:
string hebing
(vector strs,
int left,
int right)
return s;
} string encode
(vector
& strs)
return
hebing
(strs,
0, strs.
size()
-1);
}
我原本想的是,用遞迴可以分段拼接,不用一直累加,可以減少部分記憶體占用.。
但是後面才發現,遞迴才是真正的占用記憶體,因為每呼叫一次,都會多乙個棧的記憶體空間,
而且因為要返回數值,還可能對資料進行賦值,因此耗時更加恐怖。
遞迴是一種很方便的**實現方式,但是會占用大量的空間,對返回值進行操作時,也會額外消耗時間;個人認為除了特定的某些問題,必須二叉樹需要用到遞迴,其他問題可以不用遞迴的話盡量不用為好;就比如動態規劃的最終方法都是從遞迴回歸 到迴圈。
Linq的其他方面
前面的幾篇文章簡述了linq的基本概念 linq的概念解析 linq 概述 語法及例項 深入理解linq的參考例子 實際使用中,linq的其他方面做個簡述,以備使用中參考 微軟的框架包含的 linq to object linq to xml linq to sql codeplex.com社群有很...
陣列的其他方法
reverse 反 翻轉陣列 var arr i love you arr.reverse console.log arr sort 對陣列進行排序 var arr 1,5,9,3,7,4,6,2,8 arr.sort arr.sort function a,b console.log arr co...
求質數的其他方法
如果要求輸出1 n之間的所有質數,需要注意如下幾個方面 1 2是質數,單獨輸出 2 只需測試奇數是否是質數 3 如何判斷某個數x是否是質數,有如下幾種方法 i.測試x是否能被3 x 2的數整除,若沒有能整除的,則為質數,否則不是質數 ii.測試x是否能被3 sqrt x 之間的數整除,若沒有能整除的...