數組去重

昨天去面試,作了個面試題,數組去重,回來查了一下,總結有這幾種:面試

方法1:數組

1. 使用新的數組存放去重後的結果ide

2. 循環遍歷未去重的數組,將該數組的的每個元素與去重數組的的每一個元素相比較,若是不相等就把該元素添加到已經去重的數組中this

  // 方法1
        var a = [1,1,2,3]
        Array.prototype.unique = function () {

            //建立一個數組存放
            var temp = [this[0]]

            for(var i = 1; i < this.length;i++){
                var isRepeat = false // 默認當前不重複
                for(var j = 0; j < temp.length; j ++){
                    if(this[i] == temp[j]){
                        isRepeat = true
                        break;
                    }
                }
                if(!isRepeat){
                    temp.push(this[i])
                }
            }

            return temp;
        }

        console.log(a)
        a.unique()
        console.log( a.unique())
View Code

方法2:spa

1.先將原數組進行排序.net

2.檢查原數組中的第i個元素 與 結果數組中的最後一個元素是否相同,由於已經排序,因此重複元素會在相鄰位置prototype

3.若是不相同,則將該元素存入結果數組中3d

 // 方法2
        Array.prototype.unique2 = function (){

            //建立一個數組存放
            var temp = [this[0]]

            // 對原數組進行排序
            this.sort()

            for(var i = 1; i < this.length;i++){

                this[i] != temp[temp.length - 1] && temp.push(this[i])

            }

            return temp

        }
View Code

方法3:code

1.先將原數組進行排序htm

2.檢查原數組中的第i個元素 與 結果數組中的最後一個元素是否相同,由於已經排序,因此重複元素會在相鄰位置

3.若是不相同,則將該元素存入結果數組中

// 方法3  時間複雜度O(n) = n
        Array.prototype.unique3 = function (){
            //建立一個數組存放
            var temp = []
            var obj  = {}

            for(var i = 0; i < this.length;i++){

                if(!obj[this[i]]){
                    temp.push(this[i])
                    obj[this[i]] = 1
                }
            }
            return temp
        }
View Code

方法4:這個方法跟方法3同樣,只是我以爲,爲何要建立一個對象來存放呢,只是存放一個值,那麼一維數組是否是也能夠實現。查了一下數組和對象的區別,以爲像這樣不須要循環的時候,又只須要存一個數字的時候,數組和對象實際上是同樣的。

 // 方法4 時間複雜度O(n) = n
        Array.prototype.unique4 = function (){
            //建立一個數組存放
            var temp = []
            var obj  = []

            for(var i = 0; i < this.length;i++){

                if(!obj[this[i]]){
                    temp.push(this[i])
                    obj[this[i]] = 1
                }
            }
            return temp
        }
View Code

 

比較這幾個方法的運行時間,

依次應該爲:

方法1:O(n) = n*n

方法2:O(n) = n + O(sort())

方法3:O(n) = n 

方法4:O(n) = n 

當隨機生成一個長度爲10000000數組,打印這幾個的運行時間

以下圖所示:

通過屢次打印,方法3和方法4都是差很少的。均可以使用。

原文地址:http://www.jb51.net/article/46154.htm

相關文章
相關標籤/搜索