LeetCode 第17双周赛
程序员文章站
2022-07-12 12:08:43
...
双周赛排名(20/897)
第一题:1313. 解压缩编码列表
解题思路:数组的每相邻两个元素,如[a,b,c,d]代表结果有a个b以及c个d。最后将其排列出来即可。
代码:
class Solution {
public int[] decompressRLElist(int[] nums) {
int flag = 0;
List<Integer> ans1 = new ArrayList<>();
for (int i = 0; i < nums.length; i+=2) {
for (int j = 0; j < nums[i]; j++) {
ans1.add(nums[i+1]);
}
}
int[] ans = new int[ans1.size()];
for (int i: ans1) {
ans[flag++] = i;
}
return ans;
}
}
第二题:1314. 矩阵区域和
解题思路:题目是给出一个二维数组mat,而所对应的答案 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: i – K <= r <= i + K, j – K <= c <= j + K (r, c) 在矩阵内,可以使用简单的遍历,并判断有无越界即可。
代码:
class Solution {
public int[][] matrixBlockSum(int[][] mat, int K) {
int[][] ans = new int[mat.length][mat[0].length];
for (int i = 0; i < ans.length; i++) {
for (int j = 0; j < ans[i].length; j++) {
int t = 0;
for (int k = i-K; k <=i+K ; k++) {
for (int l = j-K; l <= j+K; l++) {
if (k<0||k>=mat.length || l<0||l>=mat[0].length)continue;
t+=mat[k][l];
}
}
ans[i][j]=t;
}
}
return ans;
}
}
第三题:1315. 祖父节点值为偶数的节点和
解题思路:题目需要我们返回的是祖父节点为偶数的节点和,这里我们可以使用dfs来做,每一次向下走的时候把当前的父节点当成祖父节点,当前节点当成父节点即可。
代码:
class Solution {
int ans5145 = 0;
public int sumEvenGrandparent(TreeNode root) {
dfs5145(root,null,null);
return ans5145;
}
public void dfs5145(TreeNode now,TreeNode par,TreeNode gra){
if (now==null)return;
if (gra!=null && gra.val%2==0){
ans5145+=now.val;
}
dfs5145(now.left,now,par);
dfs5145(now.right,now,par);
}
}
第四题:1316. 不同的循环子字符串
解题思路:这题可以使用双指针的思想,暴力的去枚举前缀字符串,看看后面紧跟的字符是否相同。若相同则把结果放到set中(避免出现abcabcabc这样的情况,会放两次abcabc)。之后返回set的size。
代码:
class Solution {
public int distinctEchoSubstrings(String text) {
int n = text.length();
Set<String> set = new HashSet<>();
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
int left = i,right = j;
if (j+j-i>n)break;
if (text.substring(i,j).equals(text.substring(j,j+j-i))){
set.add(text.substring(i,j));
}
}
}
return set.size();
}
}
上一篇: LeetCode 25双周赛
下一篇: Leetcode20双周赛