删除数组中的重复项
解法:
1、题目没有说不能用排序,所以首先用排序
2、通过遍历删除重复项即可
<script>
let arr=[1,5,9,7,5,3,1,1,2,5,9,3,6,7,4,6,2,0,1,10];
/*这里采用希尔排序*/
function shellSort(arr){
let shell=5;
let i;
let tmp;
for(shell;shell>1;shell=(Math.floor(shell/2))){
for(let j=shell;j<arr.length;j++){
tmp=arr[j];
for(i=j;i>0&&arr[i-shell]>tmp;i-=shell){
arr[i]=arr[i-shell];
}
arr[i]=tmp;
}
}
return arr;
}
/*删除重复项*/
function delRepition(arr){
for(let i=0;i<arr.length;){
if(arr[i]===arr[i+1]){
for(let j=i;j<arr.length-1;j++){
arr[j]=arr[j+1];
}
arr.pop();
}else{
i++;
}
}
return arr;
}
arr=shellSort(arr);
let a=delRepition(arr);
console.log(a);
</script>
其实这道题用插入排序,在插入的过程中直接删除重复项可以节省O(N^2)的事件复杂度