LeetCode每日一题--2021.11.1
题目:575. 分糖果 -----难度:简单
今天是2021.11.1,今天开始我又重新拾起每日一刷LeetCode的信心啦,最近玩的太多了,害怕找不到工作,那就继续努力吧
先来自己和自己唠唠嗑,唠唠最近的趣事
- 昨天熬夜看比赛了,EDG半决赛打三星,打满bo5给我赢了,还是蛮开心的,比较我这个老淀粉看EDG的比赛也是有五年了
- 打球认识了一个学妹,不是特别感冒
- 本来说下周去看007:无暇赴死,结果今天说封校了,没办法只能不去了
- 最近玩的有点多了,连续打球打了一周,这一个月我要好好静下心来去继续冲
1.进入正题
题目描述
题目意思大概读懂了,我啪的一下第一反应就是,妹妹获得的糖果数量不可能超过candyType的一半,然后又因为要她获得的糖果种类最多,那我就把所有种类的糖果给她,但是还不能超过一半,不够的用已经给她种类的糖果代替。啪的一下题解就出来。
class Solution {
public int distributeCandies(int[] candyType)
{
//妹妹最大能获得的糖果数也只是参数数组的一半,当
//设置最大能获得的糖果数量
int MAX=candyType.length/2;
//安排一个map
Map<Integer, Integer> mp=new HashMap<>();
for(Integer x:candyType)
{
//如果这个种类的糖果存在的话
if(mp.containsKey(x)==true) mp.put(x, mp.get(x)+1);
else {
mp.put(x,1);
}
}
int Type_N=mp.keySet().size();
return (Type_N>MAX? MAX:Type_N);
}
}
我一看这时间,不合理啊,好慢,我又去学点新做法吧
2.稍微改进
class Solution {
public int distributeCandies(int[] candyType)
{
//妹妹最大能获得的糖果数也只是参数数组的一半,当
//设置最大能获得的糖果数量
int MAX=candyType.length/2;
Set<Integer> st=new HashSet<>();
for(Integer x:candyType)
{
st.add(x);
}
return (st.size()>MAX? MAX:st.size());
}
}
我中间的map究其原因都是为了求得无重复元素一个集合(属于是用哈希表用魔怔了),改成set之后快了好多
结果
我直接睡觉