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);
一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;