1 回答

TA貢獻1772條經驗 獲得超8個贊
寫了一個,不過沒有仔細測過。。。
好處就是和用indexOf
,splice
相比速度快很多,代碼復雜度也小很多。。。
代碼復雜度: O(n)
, 空間復雜度: O(1)
Array.prototype.isSubArrayOf = function(a){
if(!a || !(a instanceof Array)) return false;
let b = this;
let aLength = a.length, bLength = b.length;
if(aLength < bLength) return false;
let indexA = 0, indexB = 0;
while(indexB < bLength && indexA < aLength ) {
let tempA = a[indexA], tempB = b[indexB];
if(tempB === tempA) {
indexA++;
indexB++;
} else if(tempB > tempA) {
indexA++;
} else {
return false;
}
}
return indexB === bLength;
}
非順序排列數組,我把上面的判斷刪了,可以酌情加上:
代碼復雜度: O(n+m)
, 空間復雜度: O(m)
Array.prototype.isSubArrayOf = function(a){
let b = this, map = {};
for(let i of b) {
map[i] = map[i] ? map[i] + 1 : 1;
}
for(let i of a) {
if(map[i]) {
map[i] = map[i] - 1;
if(map[i] === 0) delete map[i];
}
}
return Object.keys(map).length === 0;
}
添加回答
舉報