網(wǎng)站app下載平臺怎么做的代運營公司是怎么運營的
完成一半題目
有?N
?位扣友參加了微軟與力扣舉辦了「以扣會友」線下活動。主辦方提供了?2*N
?道題目,整型數(shù)組?questions
?中每個數(shù)字對應了每道題目所涉及的知識點類型。 若每位扣友選擇不同的一題,請返回被選的?N
?道題目至少包含多少種知識點類型。
示例 1:
輸入:
questions = [2,1,6,2]
輸出:
1
解釋:有 2 位扣友在 4 道題目中選擇 2 題。 可選擇完成知識點類型為 2 的題目時,此時僅一種知識點類型 因此至少包含 1 種知識點類型。
示例 2:
輸入:
questions = [1,5,1,3,4,5,2,5,3,3,8,6]
輸出:
2
解釋:有 6 位扣友在 12 道題目中選擇題目,需要選擇 6 題。 選擇完成知識點類型為 3、5 的題目,因此至少包含 2 種知識點類型。
提示:
questions.length == 2*n
2 <= questions.length <= 10^5
1 <= questions[i] <= 1000
我的解答
將知識點類型和在2N道題中出現(xiàn)的次數(shù)儲存在哈希表中,類型為key,次數(shù)為value
再將哈希表根據(jù)value從大到小排序
根據(jù)value的累加和與N比較,大于等于時,看看是第幾個value,即可判斷知識點的類型
第一次解答錯誤,因為在存儲次數(shù)times,下一個知識點類型的times未置1
完整代碼,哈希表根據(jù)value從大到小排序還是網(wǎng)上借鑒的,還是不太建議用這個思路做吧
Java HashMap按key排序和按value排序的兩種簡便方法
class Solution {public int halfQuestions(int[] questions) {//將每種類型及其對應出現(xiàn)的次數(shù)存到哈希表中HashMap<Integer,Integer> h=new HashMap<Integer,Integer>();int i=0,j=0,times=1;for(i=0;i<questions.length;i++){if(questions[i]==0)continue;for(j=i+1;j<questions.length;j++){if(questions[i]==questions[j]){times=times+1;questions[j]=0;}}h.put(questions[i],times);times=1;}List<HashMap.Entry<Integer, Integer>> list = new ArrayList<HashMap.Entry<Integer, Integer>>(h.entrySet()); //轉(zhuǎn)換為listlist.sort(new Comparator<HashMap.Entry<Integer, Integer>>() {@Overridepublic int compare(HashMap.Entry<Integer, Integer> o1, HashMap.Entry<Integer, Integer> o2) {return o2.getValue().compareTo(o1.getValue());}});int sum=0;for(i=0;i<list.size();i++){sum=sum+list.get(i).getValue();if(sum>=questions.length/2){return i+1;}}return -1;}
}