第 226 場周賽
阿新 • • 發佈:2021-02-01
技術標籤:LeetCode
第 226 場周賽
5654. 盒子中小球的最大數量
class Solution { public int countBalls(int lowLimit, int highLimit) { HashMap<Integer, Integer> frequency = new HashMap<>(); for (int i = lowLimit; i <= highLimit; i++) { int carry = i; int index = 0; // 取模計算各位數字之和,即為map中的key while (carry > 0) { index += carry % 10; carry /= 10; } // 頻次加一 frequency.put(index, frequency.getOrDefault(index, 0) + 1); } int max = 0; // 獲取最大值 for (int v : frequency.values()) { max = Math.max(max, v); } return max; } }
5665. 從相鄰元素對還原陣列
class Solution { public int[] restoreArray(int[][] adjacentPairs) { int n = adjacentPairs.length; int[] res = new int[n+1]; Arrays.fill(res,100001); Map<Integer,Integer> maps = new HashMap<Integer,Integer>(); Map<Integer,List<Integer>> pairs = new HashMap<Integer,List<Integer>>(); Set<Integer> set = new HashSet<Integer>(); for(int[] pair:adjacentPairs){ int a = pair[0]; int b = pair[1]; if(maps.containsKey(a)){ maps.put(a,maps.get(a)+1); }else{ maps.put(a,1); } if(!pairs.containsKey(a)) { List<Integer> cur = new ArrayList<Integer>(); cur.add(b); pairs.put(a, cur); }else { List<Integer> cur = pairs.get(a); cur.add(b); pairs.put(a, cur); } if(maps.containsKey(b)){ maps.put(b,maps.get(b)+1); }else{ maps.put(b,1); } if(!pairs.containsKey(b)) { List<Integer> cur = new ArrayList<Integer>(); cur.add(a); pairs.put(b, cur); }else { List<Integer> cur = pairs.get(b); cur.add(a); pairs.put(b, cur); } } for(Map.Entry<Integer, Integer> m:maps.entrySet()) { if(m.getValue()==1) { if(res[0]==100001) { res[0]=m.getKey(); }else { res[n]=m.getKey(); } set.add(m.getKey()); } } int count = 2; int head = res[0]; while(count<n+1) { List<Integer> cur = pairs.get(head); // System.out.println("cur:"+head); for(int i:cur) { // System.out.println(i); if(!set.contains(i)) { res[count-1]=i; set.add(i); count++; head = i; break; } } } return res; } }
5667. 你能在你最喜歡的那天吃到你最喜歡的糖果嗎?
class Solution { public boolean[] canEat(int[] candiesCount, int[][] queries) { int len = candiesCount.length; double[] sum=new double[len+1]; for(int i=1;i<=len;i++){ sum[i]=sum[i-1]+candiesCount[i-1]; } int count = queries.length; boolean[] res = new boolean[count]; for(int i=0;i<count;i++){ int[] query = queries[i]; int target = query[0]; int day = query[1]; int perDay = query[2]; double min = day+1.0; double max = (day+1.0)*perDay; // System.out.println("min:"+min+" ;max:"+max+" sum[cur]:"+sum[cur]+" ;sum[target]:"+sum[target]); if(sum[target]<max && min<=sum[target+1]){ res[i] = true; } } return res; } }
今年的第三場周賽打卡。
比賽的時候第一題卡了很久,當時很想找出規律,用簡單的數學方法解它費了很久,看了其他人的題解,發現用簡單的map可以做。
第三題是賽後發現這題比較容易,也沒參考別人的程式碼自己寫了。