上一期讲了如何用random产生随机数来产生中奖号码,这次讲一个如何抽取幸运号码作为中奖号码。
问题描述如下:
某平台进行抽奖活动,需要抽出一位幸运观众,抽取方式为ID号码。用户ID一共七位,该中奖ID的每一位数皆为该位的众数。如果有两个众数,则取小。
下面是实现代码:
package com.atguigu.java;
public class HelloWorld {
private static int[] count;
public static void main(String[] args){
//定义五个编码
int []count= {0,0,0,0,0,0,0,0,0,0};
String[] str=new String[5];
str[0]="2324876";
str[1]="4214327";
str[2]="2146726";
str[3]="3347128";
str[4]="3213157";
int l=str[0].length();
int num=0;
// int number=0;
for(int i=0;i<l;i++)
{
count[str[0].charAt(i)-'0']++;
count[str[1].charAt(i)-'0']++;
count[str[2].charAt(i)-'0']++;
count[str[3].charAt(i)-'0']++;
count[str[4].charAt(i)-'0']++;
int max=count[0];
for(int j=1;j<10;j++)
{
if(count[j]>max)
{
max=count[j];
num=j;
}
count[j]=0;
// number++;
}
System.out.print(num);
count[0]=0;
}
//System.out.println("");
// System.out.print(number);
}
}
上面的算法很简单,最关键的一点就是:用一个包含十个元素的数组count来记录每一位数中各个数出现的次数(因为所有数都在0~9这个范围内,故count只需要包含0~9就可以。)每当一个数出现,则count数组中下标为该数的元素+1。例如,在比较ID第一位数的时候,如果一位用户ID的第一位为1,那么a[1]则+1,如果用户第一位为2.那么a[2]+1。如此一来,该位ID所出现的所有数的出现次数都被记录下来,接下来只要找出众数即可。
上文代码中被注释掉的number是用来计算时间复杂度的。
代码运行结果如下:
如图可知,算法时间复杂度为O(n)。
好啦,本次的幸运观众的ID为:2214126。