3種時間復雜度實現不同類型的無序數組去重


我愛擼碼,擼碼使我感到快樂!
大家好,我是Counter。
今天來實現下,js中不同類型的無序數組去重,代碼都寫好了,基本都注釋了。今天先上代碼吧。
arr是我自己自定義的一個數組。這種去重的時間復雜度為O(n²),因為它進行了2次長度為n的循環。第一種代碼如下:

// 定義一個數組
        var arr = [ 1, 2, 3, 4, 5, 3, 2, 5, 6, 7, 8, "1", {a: 1, b: 2}];
        // 時間復雜度為O(n²);
        function one(arr) {
            // 定義一個空數組
            var newArr = [];
            // 遍歷數組
            for( key of arr) {
                // in -> 索引值,of -> 具體元素
                // console.log(key);
                // 如果這個空數組里沒有這個元素的話,就給它添加上
                if ( newArr.indexOf(key) === -1) {
                    newArr.push(key);
                }
            }
            // 結果返回
            return newArr;
        }

第一種方法的效果如下:

 

 

 

 

 

 

 

 

第二種方法,時間的復雜度為O(nlogN),因為它對數組進行排序了,這種方法會改變原有數組的排序。如果不在乎就沒事,如果在乎就不能使用這種方法。第二種代碼如下:

// 時間復雜度為O(nlogN),不過這查重會導致不會安裝原有的數組進行排序,即不穩定性,如果不在乎數組的排序,也可以,不影響,如果在乎就不行了
        function two(arr) {
            // 創建空數組
            var newArr = [];
            // 對數組排序
            arr.sort();
            // 遍歷數組
            for( var i = 0; i < arr.length; i++) {
                // 如果當前的這個元素不等於下一個元素
                if ( arr[i] !== arr[i+1] ) {
                    // 那么將這個元素插入到新數組
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }

第二種效果如下:

 

第三種方法,運用到了ES6的集合對象,時間復雜度為O(n)。

第三種代碼給出:

// 時間復雜度為O(n) ,利用ES6里的Set集合對象,它返回的是一個集合,不重復的
        function three(arr) {
            // 創建一個集合對象
            var set = new Set(arr);
            // 把集合再傳回去,再轉成數組
            return Array.from(set);
        } 

第三種效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM