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

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

 

昨天一道面试题,因为太紧张加上自己对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));

 

原文地址:https://www.cnblogs.com/yangzec/p/3345931.html