在一副牌中,每张牌上都写着一个整数。
当且仅当可以将整个牌组拆分为一组或多组牌时返回true,其中:
每组至少有2张牌。每组的牌都有相同的整数。
例子:
输入:甲板= [1,2,3,4,4,3,2,1]
输出:真
说明:可能的分区 [1,1],[2,2],[3,3],[4,4]
.
我试图解决这个使用堆栈,但它不是预期的工作,它是打印假,而它应该打印真。为了代码的清晰,我添加了注解。
Package 实践kg;
import java.util.Stack;
public class DeckInteger {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
//declaring individual variable for each integer and setting all of them to zero
int p_1=0,p_2=0,p_3=0,p_4=0,p_5=0,p_6=0,p_7=0,p_8=0,p_9=0;
//adding element which can form pair and should return true
stack.add(1);
stack.add(2);
stack.add(1);
stack.add(2);
stack.add(1);
stack.add(2);
//checking till stack is empty and comparing the top of stack to all the individual integer and incrementing them and popping the top element
while(stack.empty()==false) {
if(stack.peek()==1) {
p_1+=1;
stack.pop();
break;
} else if(stack.peek()==2) {
p_2+=1;
stack.pop();
break;
} else if(stack.peek()==3) {
stack.pop();
p_3+=1;
break;
} else if(stack.peek()==4) {
stack.pop();
p_4+=1;
break;
} else if(stack.peek()==5) {
stack.pop();
p_5+=1;
break;
} else if(stack.peek()==6) {
stack.pop();
p_6+=1;
break;
} else if(stack.peek()==7) {
stack.pop();
p_7+=1;
break;
} else if(stack.peek()==8) {
stack.pop();
p_8+=1;
break;
} else {
stack.pop();
p_9+=1;
break;
}
}
//checking if any of the integer variable have the value 1 then it cannot form pair as x>=2 so it should print false
if(p_1==1||p_2==1||p_3==1||p_4==1||p_5==1||p_6==1||p_7==1||p_8==1||p_9==1) {
System.out.println("False");
}
//print true as if any of the variable have a value other than one
else {
System.out.println("True");
}
}
}
2条答案
按热度按时间5uzkadbs1#
如果你有
a_i
带整数的卡片i
,则所有可能的分区都是a_i
,否则,此卡不能拆分。因此,您只需要计算所有的唯一数,并计算它们的最大公约数。这个最大公约数就是可能的最大x。wljmcqd82#
在您使用的代码中
break
每个内部if
条件。所以它会从while
在第一次迭代本身中循环。仅此而已p_1
等于1
其他人都会0
. 有一个更好的方法来解决这个问题Maps
键作为整数,值作为计数假设输入为数组:
int[] input
```private boolean isValidGroup(Stack stack){
Map<Integer, Integer> countMap = new HashMap<>();
while(!stack.empty()){
countMap.merge(stack.pop(),1,Integer::sum);
}
// The above map would contain the count for each integer.
// For input : {1,2,4,2,4,3,1,3} , the map would be {1:2,2:2,3:2,4:2}
}