第191场周赛

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名左右,加油,加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值