欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
    }
}