zoukankan      html  css  js  c++  java
  • js之24道算法题

    //1、冒泡排序
        var arr = [5,8,3,6,9]
        for(var i=0;i<arr.length;i++){
         for(var j=i+1;j<arr.length;j++){
              if(arr[i]>arr[j]){    
                  var temp
                  temp=arr[i];
                  arr[i]=arr[j];
                  arr[j]=temp;
                  }
    
             }
        }
         console.log(arr)
    //temp是中间变量,把要交换的第一个元素arr[j]赋值给中间变量,也是把第一个元素存储起来
    //第二个元素赋值给第一个元素,因为第一个元素我们已经存储在中间变量中了,所以我们不用担心它的值会被覆盖掉
    //temp存储了第一个元素的值,把它赋值给第二个元素,就是把第一个元素赋值给第二个元素了,到这一步,两个元素已经交换位置了
    
         //2、字符串出现最多个数(2种)
         //.str=”abcdefgaaass”找字符中出现最多的;第一种
             var str ='abcdefgaaass'
              var newarr=str.split("");
              var max=0,val="";
              function fn(arr,a){
                var count=0;
                for(var i=0;i<arr.length;i++){
                    if(arr[i]==a){
                      count++;
                    }
                }
                return count;
              }
              for(var i=0;i<newarr.length;i++){
                  var ind=fn(newarr,newarr[i]);
                  if(ind>max){
                    max=ind;
                    val=newarr[i];
                  }
              }
              console.log("出现最多的字符是"+val+"出现的次数是"+max)
              //第二种
              var strr='aaasssssbbbcccccccccccccccccccccc'
              function change(arr){
                  for(var j=0,len=0,str1='';j<arr.length;j++){
                  var x = arr.substr(j,1);
                  var y = arr.split(x);
                  if(y.length-1>len){
                      len = y.length-1;
                      str1=x+','+len;
    
                  }
              }
                    return str1;
              }
              
              console.log(change(strr));
    
            
            //3、编程实现,往数组里插入一个元素
            var arr = ["1411A","44","34305","djg","pic"];
            function fun3(ar,index,date){
                for(var i=ar.length-1;i>=index;i--){
                    ar[i+1]=ar[i];
                }
                ar[index] = date;
            }
            fun3(arr,2,"hello");
            console.log(arr);
    
    
            //4、编程实现IndexOf方法
            var brr=[5,9,6,3,2,5];
            function indexfun(arr,val){
                for(var i=0;i<arr.length;i++){
                    if(arr[i]==val){
                        return i;
                    }
                }
                return -1;
            }
            console.log(indexfun(brr,13));
    
    
            //5、求数组中最大值和最小值
            var arr=[2,41,3,1,8];
            var  temp=arr[0];
    
             for(var i=0;i<arr.length;i++){
                   if(arr[i]<temp){
                       temp=arr[i];
                   }
             }
             console.log(temp)
    
             
    
             // 6、将字符串转换为驼峰形式
            var  str="border-bottom-color";
            function isstr(str){
              var arr=str.split("-");
              var one=arr[0];
              for(var i=1;i<arr.length;i++){
                  one+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
              }
              return one;
            }
            console.log(isstr(str));
            //7、var  str='a2b4admin3'字符的每个数字都乘2 ,成为'a4b8admin6'
           var url='a2b4admin3';
           var str11=''
            for(var i=0;i<url.length;i++){
                  if(!isNaN(url[i])){
                      str11=str11+url[i]*2
                  }else{
                      str11=str11+url[i]
                  }
            }
            console.log(str11)
    
            //8、var  str='a2b4admin3'将字符串中的数字用中括号括起来 'a[2]b[4]admin[3]'
          function  num(str){
          var  arr=str.split('')
          for(var i=0;i<arr.length;i++){
                  if(!isNaN(arr[i])){
                      arr[i]="["+arr[i]+"]"
                  }
    
          }
             return arr.join('')
          }
    
         console.log(num(url))
         //9、首先判断在数组中哪个数最大,然后让数组中的第一个数与最大的数相乘,返回结果
             function maxn(arr){
                    var big=arr[0];
                    for(var i=0;i<arr.length;i++){
                        if(arr[i]>big){
                            big=arr[i]
                        }
                    }
                    return big*arr[0]
                }
                console.log(maxn([2,1,80,6,10]));
    
        //10、 var str='abc' 让字符串重复3遍,成为 str='abcabcabc'
        var str='abc';
            function xun(a,b){
                var newstr='';
                for(var i=1;i<=b;i++){
                    newstr+=a
                }
                return newstr
            }
            console.log(xun(str,3));
    
            
            //11、10到100的十位随机数并排序
            for(var i=1;i<=10;i++){            
                    var ran=Math.floor(Math.random()*91+10)            
                arr.push(ran)
            }
            console.log(arr.sort(function(a,b){return a-b}))
    
            //12、写出一个段脚本,输出当前日期5天之后是星期几,三种方法
            //第一种
            /*var now=new Date();
            var day=now.getDate()
            var week=['日','一','二','三','四','五','六']
            now.setDate(day+5)
            console.log('星期'+week[now.getDay()])*/
            //第二种
            /*var now=new Date();
            var year=now.getFullYear();
            var month=now.getMonth();
            var date=now.getDate();
            var week=['日','一','二','三','四','五','六']
            var fulture=new Date(year,month,date+5);
            console.log('5天之后是星期'+week[fulture.getDay()])*/
            //第三种
            /*var now=new Date();
            var time=now.getTime();
            var fulture=new Date();        
            var ftime=time+24*60*60*1000*5;
            var week=['日','一','二','三','四','五','六'];    
                fulture.setTime(ftime);
            console.log('5天之后是星期'+week[fulture.getDay()])*/
    
            //13、封装一个n天之后是星期几的函数
            function getday(n){
                n=typeof(n)==='undefined'?0:n;
                var now=new Date();
                var time=now.getTime();
                var fulture=new Date();
                var ftime=time+24*60*60*1000*n;
                fulture.setTime(ftime);
                return fulture.getDay();
            }
            console.log(getday());
    
            //14、"wellcome  to beijing"把第一个变大写返回'WellcomeToBeijing'
            //和上题相同。驼峰
            
    
            //15、封装一个方法,实现求任意多个数的平均值。
            function f1(){
                //用一个变量接收和
                var temp = 0;
                //循环每个参数
                for(var i=0; i<arguments.length; i++){
                    temp += arguments[i];
                }
                //返回平均数
                return temp/arguments.length;
            }
            console.log(f1(1,2,3,4,9))
    
            //16、/*判断字符串是否对称*/
            var  str1="abch6g5g6hcba";
            function isduic(str){
                for(var i=0,len=str1.length;i<len/2;i++){
                  // alert(str[i]);
                  if(str[i]!=str[len-1-i]){//str.charAt(i)!=str.charAt(len-1-i);
                      return "不对称";
                  }
                }
                return "对称";
            }
            console.log(isduic(str1));
    
            //17、千分符
             var str2=46548978911;
            function qianff(str){
                var strn=str.toString(),
                    len=strn.length,
                    ind=len%3,
                    //console.log(strn)
                    newstr=strn.substr(0,ind);
                    console.log(newstr);
                    if(ind==0){
                       newstr=strn.substr(0,3);
                        ind=3;
                        //console.log(newstr);
                    }
                    for(i=ind;i<len;i=i+3){
                      newstr+=","+strn.substr(i,3);
                    }
                    return newstr;
            }
            console.log(qianff(str2))
    
            //18、随机生成十六进制的颜色值 var arr=["0","2","3","4","5","6","7","8","9","a","b","c","d"]
            var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"];
            var fuhao = "#";
            for(var i=0;i<6;i++){
                var color = arrHex[Math.floor(Math.random()*arrHex.length)];
                fuhao= fuhao+color;
                // str =str+arrHex[a];
            }
            console.log(fuhao);
    
            //19、随机从数组中取出三个不同的值。var arr = [1,2,3,4,5,6,7,8,9];
            var arr = [1,2,3,4,5,6,7,8,9];
            console.log(arr.indexOf(0))
    
            // var brr = [];
            // for(var i=0;brr.length<3;i++){
            //     var a = Math.floor(Math.random()*arr.length);
            //     var b = arr[a];
            //     if(brr.indexOf(b)==-1){//
            //         brr.push(b);                                                                                    }
            // }
            // console.log(brr);
    
            //20、求数组中字符串的个数
            var str=[0,1,2,3,4,5,"a","b","c","b"],sum=0;
            function strn(arr){
                for(var i=0;i<arr.length;i++){
                    if(typeof(arr[i])=="string"){
                        sum++;
                    }
                }
                return sum;
            }
            console.log(strn(str));
    
            //21、删除数组中指定的值
            var drr = ["1411A","44","34305","djg","pic",100,35,28];
            function fun5(rr,num){
                // for(var i = 0; i<rr.length;i++){
                //     if(rr[i]==num){
                //         rr.splice(i,1);
                //         break;
                //     }
                // }
                var newrr = rr.splice(num,1);
                return rr;            
            }
            console.log(fun5(drr,1));
    
            //22、把重复的值放入一个新的数组中  //这中方法过于繁琐,可以使用indexOf方法,等于-1判断
            var str = ["55","55","2","1"];
            function fen(arr,num){
                var a = 0;
                for(var i = 0;i<arr.length;i++){
                    if(arr[i]==num){
                        a++;
                    }
                }
                return a;
            }
            var xin = [];
            for(var i = 0 ;i <str.length;i++){
                var length = fen(str,str[i]);
                if(length >1){
                    xin.push(str[i]);
                }
            }
            console.log(xin);
    
            //23、截取字符串的var s="abcdefg";截取完成后实现反转功能:g,f,e  其实等同于数组翻转
                // 第一种
            /*var str="hello";
            var arr=str.split("");
            var rts=arr.reverse();
            console.log(rts);*/
            // 第二种
            /*var str="hello";
            var strn="";
            for(var i=str.length;i>=0;i--){
                strn+=str[i];
            }
            console.log(strn);*/
            //第三种
            /*var str="hello",arr=[];
            for(var i=0;i<str.length;i++){
                arr.unshift(str[i]);
            }
            console.log(arr);*/
    
            //24、拓展一个方法,用于删除数组中的指定值。同21题一样
    
    
            //附1:编程实现数组中有几个字符串元素
            var brr = ["1411A","44","34305","djg","pic",100,35,28];
            function fun4(crr){
                var count = 0;
                for(var i = 0;i<crr.length;i++){
                    if(typeof crr[i] == "string"){
                        count++
                    }
                }
                return count;
            }
            fun4(brr);
            
            
            //附2:数组反转
            var s = "abcdefghiklmn";
            function fun6(str){
                // var ss = s.splice("");
                var ss = s.split("");
                var ssa = [];
                for(var i = 0 ;i<ss.length;i++){
                    ssa.unshift(ss[i]);
                }
                return ssa.join("");
            }
            fun6(s);
            //附3:将所有数组内所有重复的值取出来放到一个新的数组中
          // var st="123abcdefgaaaasssssssssssssss123",srn="",cou=0;
          // var str=st.split("");
          // function stn(srr,strn){
          //     var count=0;
          //     for(var i=0;i<srr.length;i++){    
          //         if(srr[i]==strn){
          //             count++;
          //         }
          //     }
          //     return count;
          // }            
          // for(var i=0;i<str.length;i++){
          //     var anr=stn(str,str[i]);
          //     if(anr>cou){
          //         cou=anr;
          //         srn=str[i];
          //     }
          // }  
          // console.log("出现最多的字母是"+srn+"次数"+cou); 
          
    
    //函数变量作用域问题
         // var tt = 10;
            // function fun1(){
            //     alert(tt);
            //     var tt = 20;
            //     alert(tt);
            // }
            // fun1();
            // var a = 5;
            // function fun2(a){
            //     a = 10;
            //     alert(a);
            // }
            // fun2(a);
  • 相关阅读:
    回调函数(callback)是什么?
    类和对象的关系
    前端性能优化十四个规则:
    响应时间过长而导致网页问题的原因?
    给老爸更换电脑
    Notes for "Python in a Nutshell"
    Debian Jessie升级至Stretch小记
    将LibreOffice文档转换为豆瓣日记
    将Emacs Org任务树导出至Freeplane思维导图
    GNU/Linux下Freeplane的界面渲染问题
  • 原文地址:https://www.cnblogs.com/yangsg/p/13274818.html
Copyright © 2011-2022 走看看