import java.util.Arrays;
public class Main {
public static int[] solution(int n, int max, int[] array) {
// Edit your code here
//先统计每种牌的数量 3张以上可以做葫芦的两种牌型 2张只能做为1种
//a3+b2<=max
//1>13>...>2
//先找出最大a 再找最大b判断满不满足不超过sum
int[] a = new int[14];//标记数组
int i = 0;
int j = 0;//a
int k = 0;//b
int l = 0;
for(i = 0; i < n; i++){
a[array[i]]++;//数量增加
}
if(a[1] >= 3)//1在3张以上,1可以做a
{
j = 1;
//int temp = 0;
for(i = 13; i > 1; i--)
{
//找b
if(a[i] >= 2 && 3 + i2 <= max)//找到符合条件的
{
k = i;
break;
}
}
}
else//1不能做a
{
//int temp1 = 0;
//int temp2 = 0;
for(i = 13; i > 1; i--)
{
if(a[i] >= 3 && a[1] >= 2 && i3 + 2 <= max)//b可以当1
{
j = i;
k = 1;
break;
}
for(l = 13; l > 0; l--)
{
if(a[i] >= 3 && a[l]>= 2 && i != l && i3 + l2 <= max)//找到符合条件的
{
System.out.println(i3 + l2);
j = i;
k = l;
break;
}
}
if(j != 0 || k != 0)
{
break;
}
}
}
if(j == 0 || k == 0)
{return new int[]{0, 0};}
else
{return new int[]{j,k};}
}
public static void main(String[] args) {
// Add your test cases here
int n = 9;
int max = 34;
int[] array = {6,6,6,8,8,8,1,5,5};
System.out.println(Arrays.toString(solution(n,max,array)));
//System.out.println(java.util.Arrays.equals(solution(9, 34, new int[]{6, 6, 6, 8, 8, 8, 5, 5, 1}), new int[]{8, 5}));
//System.out.println(java.util.Arrays.equals(solution(9, 37, new int[]{9, 9, 9, 9, 6, 6, 6, 6, 13}), new int[]{6, 9}));
//System.out.println(java.util.Arrays.equals(solution(9, 40, new int[]{1, 11, 13, 12, 7, 8, 11, 5, 6}), new int[]{0, 0}));
}
}
这段Java代码实现了一个寻找最大“葫芦”组合的算法。“葫芦”是一种特殊的牌型,由三张相同面值的牌和两张相同面值的牌组成,且这两组牌的面值不同。代码的目标是找到这样的组合,并返回这两组牌的面值;如果找不到符合条件的组合,则返回[0, 0]。
下面是代码的详细解释:
首先,代码定义了一个solution函数,它接受三个参数:n(牌的数量),max(牌面值之和的最大值),以及array(一个整数数组,表示牌的面值)。
在函数内部,首先创建了一个长度为14的数组a,用于统计每种面值的牌出现的次数。数组的索引代表牌的面值,从1到13(假设A是1,K是13)。
然后,通过一个循环遍历array,增加相应面值在a数组中的计数。
接下来,代码尝试找到可以作为“葫芦”中三张相同牌的面值。首先检查面值为1的牌是否至少有3张,如果是,则1可以作为三张牌的面值。
如果1不能作为三张牌的面值,代码会从面值13开始向下遍历,寻找至少有3张的面值,并且这个面值与面值为1的牌组合后不超过max。
如果找到了符合条件的三张牌的面值,代码会继续寻找两张牌的面值。如果三张牌的面值是1,那么两张牌的面值必须是1以外的其他面值,并且两张牌的面值与三张牌的面值组合后不超过max。
如果没有找到符合条件的三张牌的面值,代码会尝试找到两个不同的面值,使得一个面值至少有3张牌,另一个面值至少有2张牌,并且这两个面值的组合不超过max。
最后,如果找到了符合条件的“葫芦”组合,函数返回一个包含这两个面值的数组;如果没有找到,返回[0, 0]。
在main函数中,提供了一个测试用例,并打印了结果。