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

it2022-05-05  133

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

 

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

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

先定义最小值为正无穷。

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

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

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

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

 

代码如下:

var arr=[1,1,2,3,2,3,1,4,2,5,4,1,2,3,4,4,3,5,5]; function search1(arr) {     var min=Number.POSITIVE_INFINITY;     var temp=new Array();     for(i=0;i<arr.length;i++ )     {         var t=String(arr[i]);         if(temp[t])         temp[t]++;         else         temp[t]=1;     }     var min=temp[1];     var min_t;     for(n=1;n<temp.length;n++)     {          if(min>temp[n])          {             min_t=n;          }     }     return min_t; } alert(search1(arr));

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

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。

代码如下:

// JavaScript Document 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]; //sort后的结果:1,1,2,2,3,3,4,4,5,5,8,8,9,9,10,10,11,11,19,19,20,20,30   function search2(arr) {     arr.sort(function(a,b){return a-b});//排序     var min=Number.POSITIVE_INFINITY; //定义无穷大为最小值     var time=1;     var nth=arr[0];     var target=arr[0];     for(i=0;i<arr.length+1;i++)     {         if(nth!=arr[i])//判断此数是否统计结束         {             nth=arr[i];             if(time<min)             {                 min=time;                 target=arr[i-1];             }             time=1;         }         else         {             time++;         }     }     return target; } alert(search2(arr));

 

转载于:https://www.cnblogs.com/yangzec/p/3345931.html


最新回复(0)