• 找出数组中重复次数最少的数


    找出数组中重复次数最少的数

     

    昨天一道面试题,因为太紧张加上自己对Javascript的基本操作不够熟练(平时太依赖用的时候再去查),导致最后有思路,但却无从下手。

    当时的思路就是根据key-value键值对来对数组进行操作。以元素来当Key,重复次数作为value。

    先定义最小值为正无穷。

    然后新生成一个数组temp,用来保存键值对。

    循环数组arr,对每个元素进行操作之前先将元素转为String类型

    最后,得到的数组temp,下标就是其在原来数组arr中的元素,值就是重复次数。

    对数组temp循环,找出值最小的即可。

     

    代码如下:

    1. var arr=[1,1,2,3,2,3,1,4,2,5,4,1,2,3,4,4,3,5,5];
    2. function search1(arr)
    3. {
    4.     var min=Number.POSITIVE_INFINITY;
    5.     var temp=new Array();
    6.     for(i=0;i<arr.length;i++ )
    7.     {
    8.         var t=String(arr[i]);
    9.         if(temp[t])
    10.         temp[t]++;
    11.         else
    12.         temp[t]=1;
    13.     }
    14.     var min=temp[1];
    15.     var min_t;
    16.     for(n=1;n<temp.length;n++)
    17.     {
    18.          if(min>temp[n])
    19.          {
    20.             min_t=n;
    21.          }
    22.     }
    23.     return min_t;
    24. }
    25. alert(search1(arr));

    还有另外一种方法,就是先用sort函数将数据进行排列,之后生成一组有序数组。

    1. arr=[1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5]

    然后对此数组进行统计,首先标记当前值nth和次数最少的值target为arr[0],设置最小次数为正无穷Number.POSITIVE_INFINITY;

    进行循环:

    当nth!=arr[i]时候,判断统计次数time和min的大小,若time小,设置min=time,target=arr[i-1];

    因为当前指向的是下一个另外的元素,我们目前得到的是之前的元素次数,所以i-1;

    并对time置1;

    否则对time自增,进行统计。

    最后返回target。

    代码如下:

    1. // JavaScript Document
    2. var arr=[1,1,2,3,3,2,4,4,30,5,5,20,8,9,9,10,11,10,11,19,8,20,19];
    3. //sort后的结果:1,1,2,2,3,3,4,4,5,5,8,8,9,9,10,10,11,11,19,19,20,20,30
    4.  
    5. function search2(arr)
    6. {
    7.     arr.sort(function(a,b){return a-b});//排序
    8.     var min=Number.POSITIVE_INFINITY; //定义无穷大为最小值
    9.     var time=1;
    10.     var nth=arr[0];
    11.     var target=arr[0];
    12.     for(i=0;i<arr.length+1;i++)
    13.     {
    14.         if(nth!=arr[i])//判断此数是否统计结束
    15.         {
    16.             nth=arr[i];
    17.             if(time<min)
    18.             {
    19.                 min=time;
    20.                 target=arr[i-1];
    21.             }
    22.             time=1;
    23.         }
    24.         else
    25.         {
    26.             time++;
    27.         }
    28.     }
    29.     return target;
    30. }
    31. alert(search2(arr));

     

  • 相关阅读:
    【干货】如何5分钟内解决实时输入仿真(超简单)
    我们不生产bug,我们只是算法的搬运工——OO第一次作业(踩雷)总结
    OO助教总结
    oo第四次总结作业
    oo第三次总结性作业
    OO第二次总结性作业
    oo第四次作业
    C++学习记录二:
    长沙.NET社区之光
    课程总结
  • 原文地址:https://www.cnblogs.com/yangzec/p/3345931.html
Copyright © 2020-2023  润新知