只记录一下对我而言比较有意义的题目
本期总结:
- 永远保持冷静,不要激动,下次可以录屏,记录自己的心态和过程
- 图里有环的判断并不是走回自己,而是走到了重复走过的点
6132. 使数组中所有元素都等于零 - 力扣(LeetCode)
这题花了七分钟,不应该。
题目没看懂
**选出一个正整数 x
,x
需要小于或等于 nums
中 **最小的 非零 元素
又要求最少操作数,那么只能是每次选nums中的最小即可,这里想复杂了,以为是选某个区间范围内的数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public int minimumOperations(int[] nums) { int result = 0; for (int i = 0; i < nums.length;i++) { int min = getMin(nums); if (min == Integer.MAX_VALUE) { return result; } for (int j = 0; j < nums.length;j++) { if (nums[j] != 0) { nums[j] -= min; } } result++; } return result; }
public int getMin(int[] nums) { int min = Integer.MAX_VALUE; for (int i = 0; i < nums.length;i++) { if (nums[i] != 0) { min = Math.min(nums[i], min); } } return min; }
|
6133. 分组的最大数量 - 力扣(LeetCode)
脑筋急转弯啊这是
跟grades根本没关系
直接排序后,每次取1个、2个、3个即可
拿就是看这样增加到什么时候为止结束
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public int maximumGroups(int[] grades) { int k = 0; int len = grades.length; while (len - (k+1) >= 0) { len = len - (k+1); k++; } return k; } }
|
6134. 找到离给定两个节点最近的节点 - 力扣(LeetCode)
这题思路其实也容易想:
先从node1一直往下遍历,直到遇到尽头或者环,记录每个点的距离
1 2 3 4 5 6 7
| dis[node1] = 0; int d = 1; int node = edges[node1]; while (node != -1 && dis[node] == -1) { dis[node] = d++; node = edges[node]; }
|
然后node2也一直往下走,遇到node1走过的点(通过dis是否为-1判断)则计算最小值和要选择的点。同时也要判断环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| d = 0; node = node2; int select = 0; int result = Integer.MAX_VALUE; boolean[] vis = new boolean[edges.length]; while (node!=-1 && !vis[node]) { if (dis[node] != -1) { if (Math.max(d, dis[node]) < result) { result = Math.max(d, dis[node]); select = node; } } d++; vis[node] = true; node = edges[node];
}
|
但是自己提前想漏了很多点
遗漏点1:环的判断并不是走回自己啊,而是走到了重复走过的点!
遗漏点2:要注意节点距离相同的情况,要选节点编号最小!
遗漏点3:冷静冷静,不要妄自生气,你及时没进200,也拿到了每日3题的积分了!
这种easy题做了40分钟还错了2次很不应该!
6135. 图中的最长环 - 力扣(LeetCode)
大放水,欸,知道每个点不需要重复走, 这个思路就能处理了
但是要注意 ”碰到自己走过的点即成环了“ 和”碰到别人走过的点,不用再走“是有区别的,不能一起判断
所以我用了一个root来判断