代码随想录
文章平均质量分 75
六个噜酱
或许不有趣的灵魂
展开
-
「代码随想录」图论之图的DFS遍历
如果把二维矩阵中的每一个位置看做一个节点,这个节点的上下左右四个位置就是相邻节点,那么整个矩阵就可以抽象成一幅网状的「图」结构,使用visited数组来记录节点的访问情况。其实就是遍历二维数组(图)的每个值(节点),如果发现岛屿“1”,就使用DFS将连通的部分全部变为“0”(淹没岛屿),最后返回发现的岛屿数即可。graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。此处的graph为题目给出的图,root为当前搜索的根节点。原创 2023-08-14 00:27:23 · 421 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day16-二叉树3
注意:我们要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。正是因为要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。1.比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子。1.左节点为空,右节点不为空,不对称,return false。2.比较内侧是否对称,传入左节点的右孩子,右节点的左孩子。原创 2023-06-12 13:24:14 · 148 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day14-二叉树1
【代码】「代码随想录」Python刷题笔记Day14-二叉树1。原创 2023-06-09 20:00:14 · 236 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day13-队列和栈3
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。时间复杂度O(nlogk),因为只维护了k大小的堆,只对k个元素做了排序。当n>>k时,时间复杂度明显降低。在纸上滑动了半天,总算是滑明白了……(一刷至少需要理解思路)理解思路就很困难……原创 2023-06-09 11:58:11 · 132 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day11-队列和栈
解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。有效的算符为 ‘+’、‘-’、‘*’ 和 ‘/’。返回一个表示表达式值的整数。转载 2023-06-08 17:47:51 · 142 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day10-队列和栈
只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。这是一个模拟题,不涉及具体的算法,考察的就是对栈和队列的掌握程度。时间复杂度: push和empty为O(1), pop和peek为O(n)时间复杂度: push为O(n),其他为O(1)int peek() 返回队列开头的元素。原创 2023-06-03 16:43:55 · 174 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day8-字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]原创 2023-06-01 13:35:22 · 201 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day7-哈希表
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。注意:答案中不可以包含重复的三元组。原创 2023-05-31 23:51:10 · 293 阅读 · 1 评论 -
「代码随想录」Python刷题笔记Day6-哈希表
使用n = sum(int(i) ** 2 for i in str(n))精简版的,还是新建一个函数循环divmod(n, 10)求解。后者肯定相对更慢,容易超时。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。没有采用数组的方式,而是得益于方便的字典,结合加1和减1用来对照s和t中的每个字母出现的次数(无序)。时间复杂度为O(n),空间上因为定义是的一个常量大小的辅助数组,所以空间复杂度为O(1)原创 2023-05-29 22:35:28 · 312 阅读 · 1 评论 -
「代码随想录」Python刷题笔记Day4-链表专题
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。原创 2023-05-28 23:36:43 · 250 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day2-数组专题
本题真的太让人想return sorted(x*x for x in nums)了,没想到拆解开后,双指针的想法真的是十分巧妙。早上看完题目和提示用双指针后,设想了一下,左指针用来计算平方,右指针用来判断和替换,想着想着又变成暴力求解了?时间复杂度是O(n),每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。本质上是两层for循环,用滑动窗口进行优化。滑动窗口本身也是一个双指针,用一个for循环做了两个for循环做的事。原创 2023-05-25 23:06:49 · 216 阅读 · 1 评论 -
「代码随想录」Python刷题笔记Day1-数组专题
1.对于左闭右闭写法,mid所在的区间为[left, right],当left=right时区间还是有意义的,还不能退出循环,还需要判定是否存在mid=left=right;删除一个元素是一个O(N)的过程,需要将后面的元素逐个向前覆盖,比如erise(Python中的remove?给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。3.时间复杂度:O(log n),空间复杂度:O(1)原创 2023-05-24 22:18:49 · 363 阅读 · 0 评论 -
「代码随想录」Python刷题笔记Day3-链表专题
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。**【题目】**给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。原创 2023-05-28 22:37:54 · 317 阅读 · 1 评论