js算法(2)
1寻找一个数组中最多的那个数
(1)利用数组
1 function findMostNum(arr){ 2 var temp1=[];//存放去重的数字 3 var temp2=[];//存放各个数字的个数 4 var indexNum=arr[0];//存放最先开始的位置 5 var indexFirst=0;//存放数字第一次出现的位置 6 //sort方法要写参数例如[1,10,2]就会出错 7 arr.sort(function(a,b){//数组先排序 8 return a-b; 9 }); 10 for(var i=0;i<arr.length;i++){ 11 if(arr[i]!==arr[i+1]){ 12 temp1.push(arr[i]); 13 temp2.push(i-indexFirst+1); 14 indexFirst=i+1; 15 } 16 } 17 var max=0; 18 for(var j=0;j<temp2.length;j++){ 19 if(temp2[j]>max){ 20 max=temp2[j]; 21 } 22 } 23 var mostNum=[]; 24 for(var k=0;k<temp2.length;k++){ 25 if(temp2[k]===max){ 26 mostNum.push(temp1[k]); 27 } 28 } 29 return {number:mostNum,count:max}; 30 } 31 var arr=[1,10,2,2,2,2,2,4,5,6,7,8,9,3,3,3,3,3]; 32 var obj=findMostNum(arr); 33 console.log('数字字数最多的是'+obj.number+';这个(些)数字的个数是'+obj.count);
(2)利用json和数组
1 function findMostNum(arr){ 2 var json={}; 3 var newArr=[]; 4 var mostArr=[]; 5 for(var i=0;i<arr.length;i++){ 6 if(json[arr[i]]){ 7 json[arr[i]]++; 8 }else{ 9 json[arr[i]]=1; 10 } 11 newArr.push(json[arr[i]]); 12 } 13 newArr.sort(function(a,b){ 14 return b-a; 15 }); 16 for(var j in json){ 17 if(json[j]==newArr[0]){ 18 mostArr.push(j); 19 } 20 } 21 return {number:mostArr,count:newArr[0]}; 22 } 23 var arr=[1,10,2,2,2,2,2,4,5,6,7,8,9,3,3,3,3,3]; 24 var obj=findMostNum(arr); 25 console.log('数字字数最多的是'+obj.number+';这个(些)数字的个数是'+obj.count);
2、递归调用 斐波那契数列(兔子问题)
1 /*使用arguments.callee的方式来调用函数 实质还是递归调用*/ 2 // function fn(n){ 3 // console.log(arguments); 4 // if(n==1){ 5 // return 1; 6 // }else if(n==2){ 7 // return 1; 8 // }else{ 9 // if(result[n]){ 10 // return result[n]; 11 // }else{ 12 // result[n]=arguments.callee(n-1)+arguments.callee(n-2); 13 // return result[n]; 14 // } 15 // } 16 // } 17 function fn(n){ 18 if(n<=2){ 19 return 1; 20 }else{ 21 return fn(n-1)+fn(n-2); 22 } 23 }
版权所有©凉城丶旧梦,转载请注明出处!