數據結構和算法

數據結構和算法正則表達式

 

第一部分:習題 

  注意:使用typeof的時候,必定是在後面的類型上加引號,不然會出錯。算法

  codewars數組

  1.使用XO()函數判斷一個字符串中x和o的數量是否相等,相等則返回true,不然返回false。且忽略大小寫。數據結構

方法一:數據結構和算法

複製代碼

(str.match(/x/ig).length == str.match(/o/

複製代碼

  注意:1.匹配正則表達式時,ig表示忽略大小寫且在全局中匹配,不然只會返回第一個匹配的字符串;ide

     2.match()方法,若是匹配成功,則返回一個數組;若是匹配不成功,則返回null。函數

     3.可是若是不存在o或着x,那麼該方法將報錯,由於null沒有length屬性,討論將會複雜。spa

  

方法二:3d

 View Codecode

  首先將字符串使用split()方法轉化成數組,而後遍歷,若是等於O,則j加,若是等於x,則k加1;最後判斷是否相等,這種方法也很是棒。

 

2.DNA鏈條 A和T互補 C和G互補,輸入字符串ATCG應當輸出TAGC,以下:

 View Code

  注意:必定要continue,不然會出現問題。另外能夠發現:處理字符串時,先轉化爲數組每每有好的效果,由於能夠遍歷。

 

3.判斷一個數是不是 square number,方法以下:

 View Code

 

 

4.給你m塊磚搭建一個房子,最底層爲n的三次方塊轉,第二層爲(n-1)的三次方...最上面爲1塊磚,而後給你一個m,去判斷是否存在這樣的一個n,有則輸出n,沒有則輸出-1.

 View Code

 

 

5. 刪除一個數組中冗餘的項。

 View Code

 

6.給一個字符串,返回中間兩個數

 View Code

 

 

7. (好題)判斷輸入一個整數返回的乘積次數。

 View Code

 

8. 智商檢測---從偶數中找奇數,從奇數中找偶數

 View Code

 

9. 找出全部的除數

 View Code

 

 

 

第二部分: 常見題

function foo(n) {    var i = 1;    while (i < = n) {
         i *= 2;                
    }    
}

 

 這個函數的時間複雜度是多少?

 時間複雜度即根據不一樣的輸入(這裏是n),那麼程序的語句執行的次數就能夠理解爲時間複雜度。

 這裏每執行一次,i爲2x ,每執行一次,x就會增長1, 可見當2x = n 時, 程序執行完畢,那麼x爲log n ,因而程序的複雜度爲 O(logn)

 

 

 

斐波那契數列的時間複雜度是多少

斐波那契數列f(0)開始,第0項是0,第1項是1,後面的每一項是前面兩項之和,最易理解的是遞歸形式。那麼它的時間複雜度是多少呢?

複製代碼

    function fibbnaqi(n) {        if (n <= 1) {            return n;
        } else {            return fibbnaqi(n - 1)+fibbnaqi(n - 2);
        }
    }
    function log(n) {
        console.log(fibbnaqi(n));
    }
    log(0); // 0在斐波那契數列中有f(0)這一項,因此從0開始
    log(1); // 1
    log(2); // 1
    log(3); // 2
    log(4); // 3

複製代碼