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 }    
原文地址:https://www.cnblogs.com/lcddjm/p/5720634.html