1. 程式人生 > 其它 >LeetCode每日一題--2021.11.1

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之後快了好多

結果

我直接睡覺