某超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花。贴花有不同种类的,种类以编号表示,编号是一个1到100之间的数字。当收集到连续编号的三张贴花时,就可以换一个小礼物。
小明经常去某超市购物,积攒了不少贴花,你帮他看看,能换多少小礼物。
输入格式:
首先是一个正整数N(1<N<100),表示小明手上的贴花的数量。
然后是N个正整数Pi(1⩽Pi⩽1000,每个数字表示一张贴花的编号。
输出格式:
输出一个数字,表示小明可以换的小礼物的数量。如果不能换小礼物,就输出0
。
输入样例:
6
3 2 4 6 6 4
输出样例:
1
2 3 4是一个组合,之后剩下的4 6 6不是连续的编号
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
int num=scanner.nextInt();
int []hash=new int[1001];
for(int i=0;i<=1000;i++)
{
hash[i]=0;
}
for(int i=0;i<num;i++)
{
int tmp=scanner.nextInt();
hash[tmp]++;
}
int res=0;
for(int i=0;i<=997;)
{
int tmp=findMin(hash[i],hash[i+1],hash[i+2]);
res+=tmp;
if(tmp!=0)
{
for(int j=0;j<=2;j++)
{
hash[i+j]-=tmp;
}
}
i++;
}
System.out.println(res);
}
static int findMin(int a,int b,int c)
{
if(a>=b&&c>=b)
{
return b;
}
if(b>=a&&c>=a)
{
return a;
}
return c;
}
}
//LZX start this code in 2023/11/03 20:10
//LZX completed this code in 2023/11/03 20:23
//LZX-TC-IDEA-0-2023-11-03-005