我正在學習面試,並且一直在練習一些練習題。問題是:查找數組中最常見元素的JavaScript函數的速度差異
查找數組中最重複的整數。
這是我創建的功能和他們創建的功能。他們被適當命名。
var arr = [3, 6, 6, 1, 5, 8, 9, 6, 6]
function mine(arr) {
arr.sort()
var count = 0;
var integer = 0;
var tempCount = 1;
var tempInteger = 0;
var prevInt = null
for (var i = 0; i < arr.length; i++) {
tempInteger = arr[i]
if (i > 0) {
prevInt = arr[i - 1]
}
if (prevInt == arr[i]) {
tempCount += 1
if (tempCount > count) {
count = tempCount
integer = tempInteger
}
} else {
tempCount = 1
}
}
console.log("most repeated is: " + integer)
}
function theirs(a) {
var count = 1,
tempCount;
var popular = a[0];
var temp = 0;
for (var i = 0; i < (a.length - 1); i++) {
temp = a[i];
tempCount = 0;
for (var j = 1; j < a.length; j++) {
if (temp == a[j])
tempCount++;
}
if (tempCount > count) {
popular = temp;
count = tempCount;
}
}
console.log("most repeated is: " + popular)
}
console.time("mine")
mine(arr)
console.timeEnd("mine")
console.time("theirs")
theirs(arr)
console.timeEnd("theirs")
這些結果如下:
most repeated is: 6
mine: 16.929ms
most repeated is: 6
theirs: 0.760ms
是什麼讓我的功能比他們慢?
我會猜測我的效率更高,因爲我沒有額外的循環。 – user3347300
你在'mine'函數中'排序',''''已經使用已排序的排列 – Grundy
當我嘗試它時,區別不像你的測試那麼好。 '我的:0.340ms,他們的0.191ms' – Barmar