第191場周賽

圓滾滾的小堅持發表於2020-05-31

5424. 陣列中兩元素的最大乘積

class Solution {
    public int maxProduct(int[] nums) {
        Arrays.sort(nums);
    	int res = Integer.MIN_VALUE;
    	for(int i=0;i<nums.length-1;i++) {
    		int curProduct = (nums[i]-1)*(nums[i+1]-1);
    		res=res>curProduct?res:curProduct;
    	}
    	return res;
    }
}

5425. 切割後面積最大的蛋糕

這裡有個注意的點,maxH*maxW這兩個Int的值的乘積會超過Int的範圍,所以要先轉換為double

class Solution {
    public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
        int hcut = horizontalCuts.length;
    	int wcut= verticalCuts.length;
    	Arrays.sort(horizontalCuts);
    	Arrays.sort(verticalCuts);
    	int maxH = horizontalCuts[0];
    	int maxW = verticalCuts[0];
    	for(int i=1;i<hcut;i++) {
    		int range = horizontalCuts[i]-horizontalCuts[i-1];
    		maxH=maxH>range?maxH:range;
    	}
    	maxH=maxH>(h-horizontalCuts[hcut-1])?maxH:(h-horizontalCuts[hcut-1]);
    	
    	for(int i=1;i<wcut;i++) {
    		int range = verticalCuts[i]-verticalCuts[i-1];
    		maxW=maxW>range?maxW:range;
    	}
    	maxW=maxW>(w-verticalCuts[wcut-1])?maxW:(w-verticalCuts[wcut-1]);
    	
    	//double res= maxH*maxW;
        double res= Double.valueOf(maxH)*Double.valueOf(maxW);
    	double yushu = 1000000007;
    	int max = (int) (res%yushu);
    	return max;
    }
}

5426. 重新規劃路線

這道題我的想法是先將0(即最後的目的地)加入到set佇列,然後第一輪將所有與0連線的city加入set,然後每輪將與set裡的city相連的city加入set。

時間比較緊,程式碼可能寫的複雜了。

class Solution {
    public int minReorder(int n, int[][] connections) {
        int len = connections.length;
    	List<List<Integer>> lists = new ArrayList<>();
    	for(int i=0;i<len;i++) {
    		List<Integer> tempArr = new ArrayList<>();
    		tempArr.add(connections[i][0]);
    		tempArr.add(connections[i][1]);
    		lists.add(tempArr);
    	}
    	
    	Set<Integer> set = new HashSet<>();
    	set.add(0);
    	int res = 0;
    	while(!lists.isEmpty()) {
    		Set<Integer> currAddSet = new HashSet<>();
    		
    		
    		int i=0;
    		while(i<lists.size()) {
    			//System.out.println("i="+i);
    			//System.out.println("當前的lists長度:"+lists.size());
    			//System.out.println(lists.get(i).get(0)+" and "+lists.get(i).get(1));
    			if(set.contains(lists.get(i).get(0))) {
    				//需要轉換位置
    				//System.out.println("需要轉換位置");
    				res++;
    				currAddSet.add(lists.get(i).get(1));
    				lists.remove(i);
    			}else if(set.contains(lists.get(i).get(1))){
    				//System.out.println("不需要轉換位置");
    				currAddSet.add(lists.get(i).get(0));
    				lists.remove(i);
    			}else {
    				//System.out.println("不包含");
    				i++;
    			}
    		}

    		for(int k:currAddSet) {
    			set.add(k);
    		}
    	}
    	return res;
    }
}

今天在最後一分鐘將第三題提交了,好險啊。
在這裡插入圖片描述
這次是我的最好成績了,在1000名左右,加油,加油。

相關文章