Sunly

Web前端的学习之旅


  • 首页

  • 分类

  • 归档

  • 标签

输出一个整数数组中出现次数第N多的整数

发表于 2017-05-03   |   分类于 笔试   |  

今天进行了CVTE的视频面试,总结一下;

  1. 要掌握好基础
  2. 算法编程一定要认真的分析好思路之后再下手;一定要在思路上走通,分析是很重要的一步

题目是这样的:

输出一个整数数组中出现次数第N多的整数。
2 7 4 10 15 7 2 10 3 7 4
7   3次
2   2次
4   2次  
10  2次
15  1次  
3   1次

编程实现如下:

var arr = [2,7,4,10,15,7,2,10,3,7,4];

var sortArr = function(arr,index){
    var sortedArr = [];
    var indexArr = [];
    //使用对象对数据进行统计,要记得删除有个为undefined
    //遍历数组,若存在于对象中,则加一,如果不存在,则将其值设为1;
    var sortObj = {};
    for(var i=0;i<arr.length;i++){
        if(sortObj[arr[i]]===undefined){
            sortObj[arr[i]]=1;
        }else{
            sortObj[arr[i]]++;
        }
    }
    delete sortObj[undefined];
    //分备用两个数组记录;
    var j = 0;
    for(var name in sortObj){
        indexArr[j]=name;
        sortedArr[j]=sortObj[name];
        j++;
    }
    //根据其中count的排序,对两个数组进行同步排序;使用的是冒泡排序
    var spanSort;
    var spanIndex;
    for(var k = 0;k<indexArr.length-1;k++){
        for(var p=0;p<indexArr.length-1-k;p++){
            if(sortedArr[p]<sortedArr[p+1]){
                spanSort = sortedArr[p];
                sortedArr[p] = sortedArr[p+1];
                sortedArr[p+1]=spanSort;
                spanIndex = indexArr[p];
                indexArr[p] = indexArr[p+1];
                indexArr[p+1]=spanIndex;
            }
        }
    }
    //对相同的数进行根据顺序的数据统计
    var indexNum=[];
    i=0;
    indexNum[0]=1;
    for(var s =1;s<sortedArr.length;s++){                
        if(sortedArr[s]===sortedArr[s-1]){
            indexNum[i]++;
        }else{
            indexNum[++i]=1;
        }
    }
    //寻找在indexArr中出现第n多的数的起始点;
    var realIndex=0;
    for(i=0;i<index-1;i++){
        realIndex +=indexNum[i];
    }
    //将得到结果放置在一个数组中返回
       var returnedArr = [];
    i=0;
    for(var q= realIndex;q<realIndex+indexNum[index-1];q++){
        returnedArr[i]=indexArr[q];
        i++;
    }

    return returnedArr;
};
var narr = sortArr(arr,2);
console.log(narr);

这个问题我的解决方案是有些复杂的,同仁,有没有更好的方法呢?

1…345…21
孙丽莹

孙丽莹

点点滴滴的Web前端的学习历程

21 日志
12 分类
16 标签
© 2017 孙丽莹
由 Hexo 强力驱动
主题 - NexT.Mist