今天去看了時間複雜度,覺得在**執行優化中,還是佔據著很大一部分程度了。參考文章這篇文章裡看了陣列去重,沒有檢查資料型別所以我在此之上對此做出了一點修改,本篇使用了hash演算法。以下內容大部分參考了大神文章
我也有想過做乙個功能強大的陣列深度去重方法,原諒我能力有限,絞盡腦汁沒有想出來
歡迎大神指教
建立空物件會有__proto__,這時候用object.create(null)
就不會有了
inte***ce
itemp
|any
}function
arrayunique
(arr:
any)
temp[arr[0]
][(typeof arr[0]
)]= arr[0]
for(
let i =
1; i < arr.length ; i++)}
if( temp[arr[i]][
(typeof arr[i])]
=== undefined && temp[arr[i]
]!== arr[i])}
return result;
}
js
function
arrayunique
(arr)
; temp[arr[0]
]= object.
create
(null);
temp[arr[0]
][(typeof arr[0]
)]= arr[0]
;for
(var i =
1; i < arr.length; i++);
}if(temp[arr[i]][
(typeof arr[i])]
=== undefined && temp[arr[i]
]!== arr[i])}
return result;
}
同時我用去測了函式執行時間
// 定義乙個測試函式,將待測函式作為引數傳入
const test =
(func:any ,n:any)
:any =>
const arr =[1
,2,3
,456,7
,8,null,1
,2,3
,4,undefined,6,
7,8,
9,"1"]
let time =
test
(arrayunique,arr)
;console.
log(time)
;
列印結果
測試大量資料資料時間
const arr =
newarray
(100000
)let time =
test
(arrayunique,arr)
;console.
log(time)
;
時間複雜度為O(1)的跳台階
分析 這是一道典型的動態規劃的題目,我們可以這樣想,我們最後一步可以跳1級,也可以跳2級,跳 跳n級,我們用最後一步跳一級來舉例子,假設最後一步跳1級,那還剩下n 1個台階,又可以分為最後一步跳1級,2級 直到n 1級。好啦,就分析到這裡,我們可以看到當我們最後一步跳一級的時候,剩下的n 1級台階又...
刪除鍊錶結點(時間複雜度為O 1 ))
題目 給定鍊錶的頭指標和乙個結點指標,在o 1 時間刪除該結點。鍊錶結點的定義如下 struct listnode 函式的宣告如下 void deletenode listnode plisthead,listnode ptobedeleted 分析 這是一道廣為流傳的google面試題,能有效考察...
實現鍊錶逆序,空間複雜度為O(1)
乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括為參數列中形參變數分配的儲存空間和為在函式體中定義的區域性變數分配的儲存空間兩個部分。include using namespace std struct linknode linknode reverselink li...