![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
kimroniny
~~~让我们荡起双桨~~~
展开
-
Leetcode 0863.二叉树中所有距离为 K 的结点
最终的节点集合有两种情况:属于target节点的子节点(包括target节点本身)属于target节点的祖先节点的子节点针对第一种情况:直接深搜遍历target节点的左子节点与右子节点即可针对第二种情况:从root节点遍历到target节点,保存target的所有祖先节点、祖先节点到target节点的距离,以及target节点位于祖先节点的哪个子树。然后对所有的祖先节点进行深搜,遍历到对应的距离即可。特殊情况k = 0target节点就是root节点v...原创 2021-08-05 11:28:04 · 93 阅读 · 0 评论 -
Leetcode 1104. 二叉树寻路
重点在于转换为数学计算。注意下标从1开始,会影响计算方式。对于label,要判断是处于奇数行还是偶数行row = int(math.Log2(float64(label))) + 1 // 不要忘记 +1奇数行:说明当前label是调换顺序之后的,由于每一行首尾相加之和是固定的,不会因为顺序倒置而放生变化,所以可以计算调换顺序之前的real_label,然后计算当前label的父节点的值real_label = pow(2, row-1) + pow(2, row+1) - 1 - label原创 2021-08-05 11:27:33 · 97 阅读 · 0 评论 -
Leetcode 0743. 网络延迟时间
三种方法来练手BFS使用队列保存每一个将要访问的节点 i,并将节点 i 的标志位 flag[i] 置为 false, 入队时置为 truefor h < len(queue) { v := queue[h] for _, edge := range edges[v] { if cost[edge.v] > cost[v]+edge.time || (cost[edge.v] == -1) { cost[edge.v] = cost[v原创 2021-08-05 11:26:41 · 89 阅读 · 0 评论 -
Leetcode 0581. 最短无序连续子数组
两种方法:排序时间复杂度 O(NlogN) .这种方法很容易理解, 比对排序前后的数组, 找到元素不相同的首尾位置即可 .定界时间复杂度 O(N) .分成三个区间, 左区间是递增的, 右区间是递增的, 中间区间并不一定是目标区间, 目标区间要比中间区间更大, 因为左区间递增的元素有可能大于等于中间区间的元素, 同理, 右区间递增的元素有可能小于等于中间区间的元素. 因此需要中间区间的最小最大元素需要各自向左右区间拓展, 找到他们的边界.但是在寻找边界的过程中, 有可能会遇到比中间区间最小元素更原创 2021-08-05 11:25:48 · 102 阅读 · 0 评论 -
Leetcode 0611. 有效三角形的个数
这种在有序数组中, 确定了一个数字, 找另外一个数字的题目, 一般都可以用二分法.这个题目除了二分, 还有另外一种做法: 在确定了一个数字之后, 另外两个数字在朴素情况下, 是可以用过两个循环来遍历查找, 但是由于是有序数组, 而且三个数字之间有大小约束关系, 所以某些数字确定不可行之后, 其后的数字都可以确定为不可行, 就不需要遍历了, 利用这个特点, 就可以使用双指针来遍历.func triangleNumber(nums []int) int { l := len(nums) ans := 0原创 2021-08-05 11:24:59 · 106 阅读 · 0 评论 -
Leetcode 0802. 找到最终的安全状态
这道题主要是理解题意.无论走哪条路都能到达终点(没有出度的点),所以如果某个点处于环中肯定是不可以的.解决有向环的话,肯定使用拓扑排序了.终点即没有出度的点,而拓扑排序面向入度为0的点,所以先建立反向边.求解拓扑排序用队列,把每个入度为零的入队,不要遍历每个顶点,然后判断入读是否为0funceventualSafeNodes(graph[][]int)[]int{varnintvarin[]intvarresult[]...原创 2021-08-05 11:22:34 · 45 阅读 · 0 评论