问题描述:给你一个长度为偶数的数组,数组长度为 [2, 10,000]。其中数字范围为 [-100,000, 100,000],每个数字代表不同种类的糖果。将糖果分成数量均等的两份,妹妹最多能得到多少种糖果。
思路:想了半天,终于明白这题其实很简单,妹妹得到的糖果种类数为(糖果种类数,最多糖果数)两者的最小值。
原答案:
public int distributeCandies(int[] candies) {
int[] numRecord=new int[200001];
int length=candies.length;
int goalNum=length/2;
int kinds=0;
for(int i=0;i<length;i++){
if(numRecord[candies[i]+100000]==0){
numRecord[candies[i]+100000]++;
kinds++;
}
}
if(kinds>=goalNum)
return goalNum;
else
return kinds;
}
最佳答案:
public int distributeCandies(int[] candies) {
boolean[] seen = new boolean[200001];
int ct = 0;
int half = candies.length/2;
for (int i = 0; i < candies.length && ct < half; i++) {
int inx = candies[i] + 100000;
if (!seen[inx]) {
ct++;
seen[inx] = true;
}
}
return Math.min(ct, candies.length/2);
}
没有必要使用数字数组记录糖果的数量,使用boolean数组可以简化判断。