在no.N位置查找重复次数

时间:2017-04-18 16:29:24

标签: javascript algorithm

有一个数组,例如[1,3,5,7,9,1,2,3,5,7,7,9,9,9]我们可以输出每个数字出现的次数,数字9出现4次,数字7出现3次...那么我怎么能得到no.N地方出现的数字; 这意味着,如果我想找到no.1 9no.27



function findFrequenceNumber(arr,n){
    var count={};
    for(var i=0,len=arr.length;i<len;i++){
      if(!count[arr[i]]) count[arr[i]]=1;
      else count[arr[i]]++;
    }//I save the record in a object {num:times}
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

您可以从对象中获取所有键,将其降序排序并在第n个位置获取所需的项目。

&#13;
&#13;
function findFrequenceNumber(arr, n){
    var count = {}, keys;
    for (var i = 0, len = arr.length; i < len; i++){
        if(!count[arr[i]]) {
            count[arr[i]] = 1;
        } else {
            count[arr[i]]++;
        }
    }
    keys = Object.keys(count).sort(function (a, b) { return count[b] - count[a]; });
    console.log('keys', keys);
    return keys[n - 1];
}

console.log(findFrequenceNumber([1, 3, 5, 7, 9, 1, 2, 3, 5, 7, 7, 9, 9, 9], 1));
console.log(findFrequenceNumber([1, 2, 3, 3, 1, 1, 1, 1], 1));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

试试这个:

&#13;
&#13;
var nums = [1,3,5,7,9,1,2,3,5,7,7,9,9,9];


function reArrangeByAppearingTimes(arr){
    var i, appearingTimes = {}, sortableAppearingTimes = [];
    
    // Looping over the array to get every element appearing times. sotred in OBJECT
    for (i = 0; i < arr.length; i += 1){
        appearingTimes[arr[i]] = appearingTimes[arr[i]] ?  (appearingTimes[arr[i]] + 1) : 1;
    }

    // converting Object to Array (for sorting purpose)
    for (var key in appearingTimes) {
        sortableAppearingTimes.push([key, appearingTimes[key]]);
    }
    
    // Sorting the array
    sortableAppearingTimes.sort(function(a, b) {
        return b[1] - a[1];
    });

    // Using map to get only need values (removing appearing times)
    return sortableAppearingTimes.map(function (smallArr) {
        return smallArr[0]
    });
    
}

console.log(reArrangeByAppearingTimes(nums));
&#13;
&#13;
&#13;