Leetcode Weekly Contest 247(前三题)

题目链接: Leetcode Weekly Contest 247

写在前面:

本次周赛做出了第1题。

1、1913. Maximum Product Difference Between Two Pairs

难度:Easy

题目大意:

详见题意。

思路:

找出最大的两个数和最小的两个数,排序即可。

代码

class Solution {
    public int maxProductDifference(int[] nums) {
        int n=nums.length;
        Arrays.sort(nums);
        return nums[n-1]*nums[n-2]-nums[0]*nums[1];
    }
}

2、1914. Cyclically Rotating a Grid

难度:Medium

题目大意:

将矩阵划分成多个环,对每个环都逆时针旋转若干次。

思路:

参考高赞回答。从外往内一圈圈进行处理,找到逆时针旋转的规律即可。

代码

class Solution {
    public int[][] rotateGrid(int[][] grid, int k) {
        int m=grid.length,n=grid[0].length;
        int left=0,right=n-1;
        int top=0,bottom=m-1;
        while(left<right&&top<bottom){
            int layerElements=2*(right-left+1)+2*(bottom-top+1)-4;
            int t=k%layerElements;
            while(t-->0){
                int temp=grid[top][left];
                for(int j=left;j<right;j++){
                    grid[top][j]=grid[top][j+1];
                }
                for(int i=top;i<bottom;i++){
                    grid[i][right]=grid[i+1][right];
                }
                for(int j=right;j>left;j--){
                    grid[bottom][j]=grid[bottom][j-1];
                }
                for(int i=bottom;i>top;i--){
                    grid[i][left]=grid[i-1][left];
                }
                grid[top+1][left]=temp;
            }
            top++;
            left++;
            bottom--;
            right--;
        }
        return grid;
    }
}

3、1915. Number of Wonderful Substrings

难度:Medium

题目大意:

详见题目。

思路:

参考高赞回答,用前缀和来表示各个字母出现次数的奇偶性。

代码

class Solution {
    //参考https://leetcode-cn.com/problems/number-of-wonderful-substrings/solution/qian-zhui-he-chang-jian-ji-qiao-by-endle-t57t/
    public long wonderfulSubstrings(String word) {
        char[] arr=word.toCharArray();
        int prefix=0;
        //prfix对应的二进制表示arr[0,i]各个字符出现次数的奇数偶数,比如最后一位是0表示
        //'a'出现了偶数次,最后一位是1表示'a'出现了奇数次
        int[] cnt=new int [1<<10];//统计各个perfix出现的次数
        cnt[0]=1;//初始情况所有字符都出现了0次,对应的prefix=0
        long res=0;
        for(char c:arr){
            prefix^=(1<<(c-'a'));
            res+=cnt[prefix];//寻找之前出现的子串arr[0...l]中各个字符奇偶性和当前子串arr[0...r]完全一样的,那么arr[l+1,r]所有字符都出现了偶数次
            for(int i=0;i<10;i++){
                res+=cnt[prefix^(1<<i)];
                //prefix^(1<<i)表示之前出现的子串arr[0...l]中各个字符奇偶性和当前字符arr[0...r]只有一个字符的奇偶性不同,那么arr[l+1,r]除了一个字符其它字符都出现了偶数次
            }
            cnt[prefix]++;
        }
        return res;
    }
}

4、1916. Count Ways to Build Rooms in an Ant Colony

难度:Hard

题目大意:

详见题目。

思路

暂时不会

代码

 //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值