試題:
有這樣一個數組,成員都是數字,例如
var a = [1,2,3,4,5,2,3,4,6,7,8];
請實現a.distinct()方法,用來給數組a去掉重複值,要求對Array的原型進行擴展方法,並儘可能做到效率最優。
考察點:
1,考察應試者是否理解原型鏈
2,考察應試者是否由意識的控制算法的時間複雜度,瞭解應試者對專業課知識的掌握程度
3,考察應試者對js數組函數的瞭解程度
答案1:
Array.prototype.distinct答案2:= function(){
var a = [],b=[],oa = this.concat();
for(var i = 1;i<oa.length;i++){
for(var j = 0;j<i;j++){
if(b.indexOf(j)>-1)continue;
if(oa[j] == oa[ i]){
b.push(j);
}
}
}
this.splice(0,this.length);
for(var i = 0;i<oa.length;i++){
if(b.indexOf(i)>-1)continue;
this.push(oa[i ]);
}
return this;
};
Array.prototype.distinct答案3:= function(){
for(var i = 0;i<this.length;i++){
var n = this[i ];
this.splice(i,1,null);
if(this.indexOf(n) < 0){
this.splice(i,1,n);//不存在重複
}else{
this.splice(i,1);//存在重複
}
}
return this;
};
Array.prototype.distinct得分點:= function(){
var self = this;
var _a = this.concat().sort();
_a.sort(function(a,b){
if(a == b){
var n = self.indexOf(a);
self.splice(n,1);
}
});
return self;
};
1,應試者起碼應該自覺通過Array.prototype.distince來實現函數,若沒有這樣做,則扣分50%
2,應試者起碼會給出答案1,得分30%,如果沒有使用splice和concate,扣分20%
3,給出答案2的,得分80%,算法複雜度控制在O(n)
4,給出答案3的,得滿分,算法複雜度控制在O(1)
解讀:
原文: http://uedmagazine.com/ued/comments.php?y=10&m=11&entry=entry101114-131904