首页 > 编程知识 正文

java统计数组元素出现次数,输出数组中重复次数最多的数

时间:2023-05-06 05:51:19 阅读:114888 作者:4110

今天朋友问了我这个问题。JS会计算多个数组的重复数据

注:1 .更准确地说,如果多个数组中有两个或多个重复数据,则需要此数据

2 .各个数组中的数据不存在重复值(当然,如果有,也可以加重)。

3 .需要时间的问题,这很重要

源代码:

获取多个数组的重复数据//计算用时

functionusetime(date1,date2 ) {

vardate3=date2.gettime (-date1. gettime )//时间差的毫秒数

//计算差天数

var days=math.floor (第3天/(24 * 3600 * 1000 ) )

//计算小时数

varleave1=date3%(24*3600*1000 ) /计算天数后剩下的毫秒数

var hours=math.floor (leave1/(3600 * 1000 ) )

//计算分数之差

varleave2=leave1%(3600*1000 ) /计算小时数的剩余毫秒数

var minutes=math.floor (leave2/(60 * 1000 ) )

计算//秒差

varleave3=leave2%(60*1000 ) /分钟计算后剩下的毫秒数

var seconds=math.round (leave3/1000 ) )。

使用返回时: ' days ' ' hours ' : ' minutes ' : ' seconds ' ' leave 300; //' ' ' ';

}

返回介于//min和max之间的数据,长度为max-min 1(数据是固定的,只是顺序随机) )。

functiongetarr(min,max ) {

var arr=[];

var numToPush=min;

for(varI=0; i max-min 1; I ) {

var len=arr.length;

if(len==0) {

ARR.push(numtopush;

}else{

varrandindex=math.floor (math.random (* len );

ARR.push(numtopush;

//arr的某一方与最后一方互换

var tmp=arr[randIndex];

arr[randIndex]=arr[len];

arr[len]=tmp;

}

}

返回警报;

}

返回由//min、max之间的数构成的数据,个数为num (数据随机)

functionrandomarr (最小、最大、编号) )。

var arr=[];

for(varI=0; i num; I ) {

varrandomnumber=math.floor (math.random () * ) * (最大-最小) min );

var inArr=false;

for(varI=0; i arr.length; I ) {

if(ARR[I]==randomnumber ) {

inArr=true;

num----;

布雷克;

}

}

if (! inArr ) {

ARR.push(randomnumber;

}

}

返回警报;

}

//获取重复数据

功能获取模块

var num=arguments.length;

if(num2) { return []; (;

var obj={

ret:[],//保存相同的数据

container:[] //保存不同的数据

}

for(varI=0; i 3; I ) {

//console.log(arguments[I];

var arr=arguments[i];

obj=deal(ARR,obj );

}

返回对象;

}

//处理单个数组并与容器中的数据进行比较以获得重复数据(问题:数据量太大,容器中的数据太多)。

功能详细信息(arr,obj ) {

var len=obj.container.length;

if(len==0

) {

obj.container = arr;

}else{

var arrlen = arr.length;

for (var j = 0; j < arrlen; j++) {//遍历数组,每个元素都跟container比较

var conlen = obj.container.length;

var intoContainer = false;

for (var i = 0; i < conlen; i++) {

var conValue = obj.container[i];

if(arr[j]==conValue){ //重复的放入ret

obj.ret.push(arr[j]);

intoContainer = true;

}

}

if(intoContainer&&!inArr(arr[j],obj.container)){

obj.container.push(arr[j]); //不重复的放入容器

}

}

}

return obj;

}

//检测数组中是否已经存在这个数据

function inArr(obj,arr){

var exist = false;

var len = arr.length;

for (var i = 0; i < len; i++) {

if (arr[i]==obj) {

exist = true;

}

}

return exist;

}

//-------------------------测试--------------------------------------------

var date = new Date();

var arr_a = getArr(1,20);

var arr_b = getArr(18,35);

var arr_c = getArr(34,50);

var dumpData= getDumplicate(arr_a,arr_b,arr_c);

console.log(dumpData.ret);

//console.log(dumpData.container);

console.log(useTime(date,new Date()));

console.log("-----------------数据更加随机-----------------------");

var date1 = new Date();

// console.log(randomArr(1,100,10));

console.log(getDumplicate( randomArr(1,1000000,10000),

randomArr(1,1000000,10000),

randomArr(1,1000000,10000),

randomArr(1,1000000,10000),

randomArr(1,1000000,10000)

).ret)

var useTime = useTime(date1,new Date());

console.log(useTime);

结果:

我们测试更多数据:随机产生3个数组,共计3W条数据

结果:

5个数组5W数据:(数据分布:1W/数组)

5个数组10W数据:(数据分布:5W,4W,3W,2W,1W)

10个数组10W数据:(数据分布:1W/数组)

100个数组100W数据:(数据分布:1W/数组)

结论:1.耗时的多少取决于你的算法

2.总数据不变的情况下:数组个数尽量多,单个数组的数据不能太多.当然不能一概而论

3.本测试中,单个数组1W数据还行,5W数据不死,10W数据请找瘦瘦的黑米

问题:

1.算法是临时写的(其实没什么算法^_^),有待改进

2.测试代码中使用了一个数组容器,用于存储不重复的数据.

那么问题来了:数据量太大会造成容器中的数据过多,然后..你懂的.

3.测试数据是随机生成的,并且只有数字.如果是其他对象,请另行测试(主要是测试数据不好生成(⊙o⊙)…)

4.多维数组未测试(测试性能也不一定好0_0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。