查找一个数组中出现次数最多的值(长度为1000)

来源:互联网 发布:移动互联网和大数据 编辑:程序博客网 时间:2024/05/17 05:09

今天有一道面试题就是这个问题,然后我自己的解决方法是这样的:

   var findMost = function(arr){       let arrL=[],arrN=[],count=1;       //定义两个数组 一个存出现次数 一个存出现的数  顺带定义一个初始出现次数1       for(const i of arr.keys()){           for(var j = i+1;j<arr.length;j++){               if(arr[i]==arr[j]){                   count++;//如果和后面的值相同 就将出现次数+1                   arr.splice(arr[j],1);//删掉后面这个值相同的                   j=j-1;//将j往前移一位  不然会出现少循环的问题               }           }           if(j==arr.length){               //判断j如果j==arr.length说明就是第二个循环完成了 这个时候就可以存储这个循环的值了               arrL.push(count);               arrN.push(arr[i]);               count = 1;//初始出现次数count           }       }       console.log(arrL,arrN);//打印各个数出现的次数       //接下来判断arrL数组中最大的值了       maxL = arrL[0];       for(const i of arrL.keys()){           if(maxL<arrL[i]){               maxL = arrL[i];           }       }       console.log(maxL);       const index = arrL.indexOf(maxL);       const Most = arrN[index];       console.log("出现次数最多的值是:"+Most+";出现次数为:"+maxL);   }   findMost([1,2,3,4,5,2,2,34,4,5,322,3,4,54,34]);

然后面试官说我没考虑时间复杂度(其实我是不懂时间复杂度这个东西),然后他提示我和哈希表啥的思路,但是我还是不会,然后刚刚看了一下博客,发现了一个貌似感觉应该更简单的方法,不知道是不是面试官说的那种(其实我是真的菜鸟)

//hash啊 说个思路,定义一个对象obj,遍历数组, 对象的键为数组的元素,值为出现的次数。然后遍历这个对象,找出值为最大的那个。function findMost(arr) {    if (!arr.length) return    if (arr.length === 1) return 1    var res = {}    // 遍历数组    for (var i=0,l=arr.length;i<l;i++) {        if (!res[arr[i]]) {            res[arr[i]] = 1        } else {            res[arr[i]]++        }    }    // 遍历 res    var keys = Object.keys(res)    var maxNum = 0, maxEle    for (var i=0,l = keys.length;i<l;i++) {        if (res[keys[i]] > maxNum) {            maxNum = res[keys[i]]            maxEle = keys[i]        }    }    return maxNum}

后面延伸问了一个判断两个对象是否相同,嗯,我不会,我当时只是跟他讲了一下思路,我好好理理。

阅读全文
0 0
原创粉丝点击