题目:
实现数组去重
输入: arr数组,即需要去重的数组
输出: 返回去重后数组的长度
/*
数组去重1:
重新建立一个临时数组,遍历原数组中的元素,并判断每个元素是否在新数组中出现过。若没出现过则加入,出现过,则不加入。
时间复杂度n^2,空间复杂度n
@param arr 输入需要去重的数组
@return 返回去重后数组的长度
*/
function array_unique1(arr){
if(arr.length==0){
return 0;
}
var temp=[];
temp.push(arr[0]);
for(var i=1,len=arr.length;i<len;i++){
var j=0;//注意局部变量
for(;j<temp.length;j++){
if(temp[j]==arr[i]){
break;
}
}
if(j==temp.length){//判断是否遍历完结束还是由于有重复结束,若是遍历完结束则将元素加入
temp.push(arr[i]);
}
}
arr=temp;
console.log(arr.length);
//return arr.length;
}
// var arr=[1,2,2,4,6,4,6];
// array_unique1(arr);
/*
数组去重2:
对数组进行排序,排序后重复的元素一定是相邻的,遍历数组,如果当前元素和上一个元素相等,那么是重复的。
用index来记录不重复存放的下标,index得到到的即不重复的元素个数,遍历得到的是不同元素放在原数组的前面index个。splice()输出前index即不重复的元素。
时间复杂度和空间复杂度取决于排序
*/
function array_unique2(arr){
if(arr.length==0){
return 0;
}
arr.sort();
var index=1;
for(var i=1,len=arr.length;i<len;i++){
if(arr[i]!==arr[i-1]){
arr[index++]=arr[i];
}
}
arr=arr.splice(0,index);
console.log(arr);
console.log(index);
return index;
}
// var arr=[1,2,2,4,6,4,6];
// array_unique2(arr);
/*
数组去重3:
与1相比不用额外的存储空间,利用直接插入排序的思想,将数组分成两个部分,左边为不重复的部分,右边为等待遍历的部分。初始条件下左边为arr[0]。index表示左边部分不重复元素存放的下标。
没有经过排序,数组原来的相对顺序可以保证。
时间复杂度为n^2,空间复杂度为1
*/
function array_unique3(arr){
if(arr.length==0){
return 0;
}
var index=1;
for(var i=1,len=arr.length;i<len;i++){
var j=0;
for(;j<index;j++){
if(arr[j]==arr[i]){
break;
}
}
if(j==index){
arr[index++]=arr[i];
}
}
// arr=arr.splice(0,index);
// console.log(arr);
console.log(index);
return index;
}
// var arr=[1,2,2,4,6,4,6];
// array_unique3(arr);
/*
数组去重4:
使用对象obj={},使用key和value的对应关系来实现。
*/
function array_unique4(arr){
if(arr.length==0){
return 0;
}
var obj={};
var res=[];
for(var i=0;i<arr.length;i++){
if(!obj.hasOwnProperty(arr[i])){
res.push(arr[i]);
obj[arr[i]]=1;
}
console.log(res);
}
console.log(res.length);
}
var arr=[1,2,2,4,6,4,6];
array_unique4(arr);

253

被折叠的 条评论
为什么被折叠?



