竞赛的时候没想清楚:最后剩余的只会是一个数字,没有用好这一点。(当时想法是遇到一个不同的就给他两两消去)
然后如果遍历两两消去的话,还不能只是相邻的消去,这样会出问题。
(如果非得消去解的话,似乎应该从两个最大的开始消去,每次消去一个或者一些再去排序,重复这个运算(我也没有验证,这样可不可以)
我觉得这个题如果真的去做两两消去的话很难很难,只有算出来!
思想是:我知道最后的答案,但是我不知道也不需要知道具体是如何进行消去的!
晚安~
```
class Solution {
public int minLengthAfterRemovals(List<Integer> nums) {
//遍历并记录存储到map中
//将Map中的value存储到list中
Map<Integer,Integer> map=new HashMap();
for(int i=0;i<nums.size();i++){
map.merge(nums.get(i),1,Integer::sum);
}
List<Integer> list=new ArrayList();
for(int key:map.keySet()){
list.add(map.get(key));
}
Collections.sort(list);
//思考:如果最后有剩余,那么一定都是一个数字
//一定都是数量最多的减去其余的和
//如果数量最多的小于其余的和
int max=list.get(list.size()-1);
int otherSum=0;
for(int i=0;i<list.size()-1;i++){
otherSum+=list.get(i);
}
if(max>=otherSum){
return max-otherSum;
}else{
return (max+otherSum)%2;
}
}
}
```