1. 程式人生 > 其它 >第 226 場周賽

第 226 場周賽

技術標籤: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可以做。

第三題是賽後發現這題比較容易,也沒參考別人的程式碼自己寫了。