题目链接: 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
题目大意:
详见题目。
思路
暂时不会
代码
//