这一次只做对了第一题,计划是做对两道题,虽然有点遗憾,但毕竟是第一次参加双周赛
希望明天的第 225 场周赛可以做对2~3道题
有一起刷 leetcode 备战春招的可以互关一下,leetcode个人主页:https://leetcode-cn.com/u/eternidad/
第一题
easy难度,用了5分钟写出来,第一的大佬仅用时45秒
public int largestAltitude(int[] gain) {
//存储每个点的海拔高度
int[] heights = new int[gain.length + 1];
heights[0] = 0;
//max存储海拔高度的最大值
int max = 0;
for (int i = 0; i < gain.length; i++) {
heights[i + 1] = heights[i] + gain[i];
max = Math.max(max, heights[i + 1]);
}
return max;
}
第二题
贴一下我写的代码截图,和大佬的正确题解一对比,发现我写的看上去挺憨的。
做完这道题感觉脑子逻辑好混乱,没有思路,各种数组越界
这个是我写的一部分java代码,我就不全部放出来了👇
下面是大佬用python写的代码👇
借鉴 leetcode 题解的基本思路是:先找出每种语言哪些人已经学会了,再找出为了维持朋友关系,每种语言分别需要教哪些人(如果已经学会了就不需要再教了),取各个语言需要教的人数的最小值。
public int minimumTeachings(int n, int[][] languages, int[][] friendships) {
//两个集合,分别存储每种语言已经会的人,每种语言需要教的人
Set[] learned = new HashSet[n + 1];
Set[] needTeach = new HashSet[n + 1];
int min = Integer.MAX_VALUE;
for (int i = 0; i < n + 1; i++) {
learned[i] = new HashSet();
needTeach[i] = new HashSet();
}
//找出每种语言哪些人已经学会了
for (int i = 0; i < languages.length; i++) {
for (int j = 0; j < languages[i].length; j++) {
learned[languages[i][j]].add(i + 1);
}
}
//核心代码
//遍历朋友关系
out:
for (int i = 0; i < friendships.length; i++) {
for (int j = 1; j < learned.length; j++) {
//如果两个人已经可以交流,不需要再教,跳过
//两个人都会j语言不需要再教,回到外层循环
if (learned[j].contains(friendships[i][0]) && learned[j].contains(friendships[i][1])) {
continue out;
}
}
//不能交流,需要学习新语言
for (int j = 1; j < learned.length; j++) {
if (!learned[j].contains(friendships[i][0])) {
needTeach[j].add(friendships[i][0]);
}
if (!learned[j].contains(friendships[i][1])) {
needTeach[j].add(friendships[i][1]);
}
}
}
//找出最小值
for (int i = 1; i < needTeach.length; i++) {
min = Math.min(min, needTeach[i].size());
}
return min;
}
第三题
看到题后的第一感觉是用递归
参考题解:三种语言双百:灵机一动的解法:)
public int[] decode(int[] encoded) {
//一直异或
int n = encoded.length;
int[] v = new int[n + 1];
// 全部 n 个正整数的异或值
int all = 0;
for (int i = 1; i <= n + 1; i++) {
all ^= i;
}
// 除开第一个数的异或值
int all_but_first = 0;
for (int i = 1; i < n; i += 2) {
all_but_first ^= encoded[i];
}
// 得到第一个数
v[0] = all ^ all_but_first;
for (int i = 1; i <= n; i++) {
v[i] = v[i - 1] ^ encoded[i - 1];
}
return v;
}
第四题
一看是hard难度,果断放弃