zoukankan      html  css  js  c++  java
  • 数组去重 && 快速排序 && 数组中重复元素最多的 && 深拷贝

    
    
     var arr0 = [1,3,3,3,4,4,4,4,5,5];
    var arr1 = [10,9,2,5,7,34,65,48,90,103];
            var newArr=[];
           /*  for(var i=0;i<arr.length;i++){
                newArr.indexOf(arr[i])<0 && (newArr.push(arr[i]));
            } */
            // newArr = Array.from(new Set(arr));
    
            // 快速排序
            function quikSort(arr){
                if(arr.length<=1)return arr;
                var midIndex = Math.floor(arr.length/2);
                var midVal = arr.splice(midIndex,1)[0];
    
                var leftArr = [];
                var rightArr = [];
                for (var val of arr){
                   if(val<midVal){leftArr.push(val)}else{rightArr.push(val)}
                }
                /* for(var k=0;k<arr.length;k++){
                    if( arr[k]<midVal ){
                        leftArr.push(arr[k])
                    }else{
                        rightArr.push(arr[k])
                    }
                } */
                return quikSort(leftArr).concat(midVal,quikSort(rightArr));
            }
            console.log( quikSort(arr1) );

     数组中出现重复元素最多的:

    function maxCountElement(arr) {  
       var obj={};
       for(var i=0;i<arr.length;i++){  
           var key=arr[i];  
           if(obj[key]){
               obj[key]++;  
           }else{  
               obj[key]=1;
           }  
       }  
     
       var maxCount=0;
       var maxElement=arr[0];
       for(var key in obj){  
           if(maxCount<obj[key]){  
               maxCount=obj[key]; 
               maxElement=key;  
           }  
       }  
       return "该数组中出现次数最多的元素:"+maxElement+"出现了"+maxCount+"次";  
        }  

    对象深拷贝:

    function deepCopy(obj) {
          var result = Array.isArray(obj) ? [] : {};
          for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
              if (typeof obj[key] === 'object') {
                result[key] = deepCopy(obj[key]);   //递归复制
              } else {
                result[key] = obj[key];
              }
            }
          }
          return result;
        }

    注: 上面的代码有一点小的瑕疵,如果数组中两个不同的元素出现的次数一样多,结果只会体现第一次遇见的次数最多的                   元素,和它次数一样多的其他元素会被忽略掉。

    改进方案代码如下:

    function maxCountElement(arr) {  
       var obj={};
       for(var i=0;i<arr.length;i++){  
           var key=arr[i];  
           if(obj[key]){
               obj[key]++;  
           }else{  
               obj[key]=1;
           }  
       }  
     
       var maxCount=0;
       var maxElement=arr[0];
       var eq = [];
       for(var key in obj){  
           if(maxCount < obj[key]){  
               maxCount=obj[key]; 
               maxElement=key;  
               eq.length=0;
           }else if(maxCount === obj[key]){  
               eq.push(key);
           }
       }  
       if(eq.length > 0){
           for(var j=0;j<eq.length;j++){
           maxElement+=','+eq[j];
           }
       }
       return "该数组中出现次数最多的元素:"+maxElement+"-----出现了:"+maxCount+"次";  
        }  
    
        var arr = [1,2,2,3,3,4,5,6];
        var res = maxCountElement(arr);
    
        console.log(res);
  • 相关阅读:
    算法与数据结构实验题 5.2 Missile
    算法与数据结构实验题 2.3 击鼓传花
    算法与数据结构实验题 2.4 排队
    Linux 添加自定义命令
    转 32位linux内核2.6.38.2添加系统调用,编写类似"ps"命令模块显示进程信息
    Linux内核模块程序加载方法
    Linux下sched.h文件分析
    Kali 爆破和非爆破无线路由账号和密码+让别人无线掉线
    Kali基于路由器的ARP欺骗转发机制
    Kali nmap教程用法简介
  • 原文地址:https://www.cnblogs.com/smile-fanyin/p/10793537.html
Copyright © 2011-2022 走看看