- 博客(22)
- 收藏
- 关注
原创 图论(基础)
2、构建一个 indegree 数组记录每个节点的入度,即 indegree[i] 记录节点 i 的入度。4、开始执行 BFS 循环,不断弹出队列中的节点,减少相邻节点的入度,并将入度变为 0 的节点加入队列。5、如果最终所有节点都被遍历过(count 等于节点数),则说明不存在环,反之则说明存在环。如:给你dislikes=[ [1,2] ,[1,3],[2,4] ];3、对 BFS 队列进行初始化,将入度为 0 的节点首先装入队列。我们之前建的图,箭头指向被依赖的,所以需要将后续遍历的结果进行翻转。
2023-07-21 17:01:26
71
原创 Leetcode-T92-反转链表2**
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表。定义reverse(head,n)
2023-07-10 09:36:53
79
原创 dp-二维数组变一维数组理解
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。难点,转化的时候需要将红色部分的值存起来。问总共有多少条不同的路径?
2023-07-09 00:00:56
109
1
原创 Leetcode-T46-全排列(回溯入门+模板)
selected 列表在递归的过程中会反复被修改(添加和删除元素),如果直接将 selected 添加到 res,会导致最终 res 中的所有列表对象都是指向同一个 selected 对象,所以结果将是一个错误的全排列列表。为了解决这个问题,可以通过创建一个新的列表对象,将 selected 的内容复制到该对象中,并将该对象添加到 res 列表中。这样每次添加到 res 列表的对象都是一个独立的列表对象,不会受到后续修改的影响,确保得到正确的全排列结果。回溯的入门题,套用回溯模板即可,注意下面的细节。
2023-07-05 22:55:17
46
原创 Leetcode-剑指T25-链表中的两数相加
给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。输入:l1 = [7,2,4,3], l2 = [5,6,4]可以假设除了数字 0 之外,这两个数字都不会以零开头。2.相加时,各个位上用sum存储和,并对sum进行处理。1.使用反转链表将链表处理方便从低位开始对其相加。输出:[7,8,0,7]
2023-07-02 23:38:57
40
1
原创 Leetcode-剑指offer-35
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
2023-06-23 21:45:52
52
1
原创 二叉树BST
public E e;size = 0;} //向二分搜索数中添加新的元素e public void add(E e) {size ++;} //向以Node为根的二分搜索数中插入元素e,递归算法 private void add(Node node , E e) {size ++;return;size ++;return;} }
2023-06-15 21:41:18
62
2
原创 Leetcode-T1011
解释: 船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示: 第 1 天:1, 2, 3, 4, 5 第 2 天:6, 7 第 3。解释: 船舶最低载重 6 就能够在 3天内送达所有包裹,如下所示: 第 1 天:3, 2 第 2 天:2, 4 第 3 天:1, 4。输入:weights = [1,2,3,4,5,6,7,8,9,10], days = 5。输入:weights = [3,2,2,4,1,4], days = 3。天:8 第 4 天:9 第 5 天:10。
2023-06-14 21:02:35
44
原创 Leetcode-T875-吃香蕉
运用二分查找,当小于等于target时,将r=mid继续查找有没有更小的元素,大于target时,将l = mid+1找解。返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。
2023-06-14 20:21:56
109
原创 Leetcode-T75-ColorSorting
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。其实,变量 zero 相当于我们在三路快速排序算法中的 lt;有了这个定义,相信理解了快速排序算法的 partition 的逻辑,同学们可以很容。输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2]必须在不使用库内置的 sort 函数的情况下解决这个问题。输入:nums = [2,0,1] 输出:[0,1,2]在三路快速排序算法中的 gt。
2023-06-14 09:22:11
42
原创 BinarySearch二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
2023-06-13 20:25:58
110
原创 Leetcode-T215-数组中的第K个最大元素
使用双路快速排序,首先,进行 partition,假设结果是 p。我们只需要将 k 和 p 做比较。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
2023-06-13 19:28:34
54
1
原创 Leetcode-T206-ReverseLinkedList
使用三个指针pre,cur,next,开始时pre先指向head前的空,每次循环先将cur.next保存,再让cur指向pre,最后让pre和cur向后移一位即可。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输入:head = [1,2]输出:[5,4,3,2,1]输入:head = []
2023-06-13 09:57:48
61
1
原创 Leetcode-T51-ReversePairs
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。当j索引右边元素比左边i索引的元素小时,被赋给数组,则左边mid-i+1个元素都比j大。输入: [7,5,6,4] 输出: 5。数组中的逆序对(使用归并排序解决))
2023-06-12 18:30:02
42
1
原创 归并排序MergeSort
加入一个参数E[] temp,在函数中准备好了和arr一样的数组temp,在每次merge调用时,先将l到r的值赋给temp。先两个为一组,一个一个Merge,再四个一组,两两Merge,注意不为2的次方数也能实现,如下图。处理比较小的数据时,可直接用插入排序处理。
2023-06-12 18:23:43
115
1
原创 Leetcode-T206-ReverseLinkedList
while(cur!cur = next;//注意这里返回的是pre,因为当cur指向空的时候循环结束,此时头是pre } }
2023-06-11 19:17:48
43
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人