- 博客(20)
- 收藏
- 关注
原创 【算法思想·数组】一道数组去重经典算法题
本文参考labuladong算法笔记[本文讲的问题应该是去重相关算法中难度最大的了,把这个问题搞懂,就再也不用怕数组去重问题了。
2024-08-31 00:49:13
666
原创 【算法思想·数组】一个方法团灭nSum问题
经常刷力扣的朋友肯定知道鼎鼎有名的twoSum问题,不过除了twoSum问题,力扣上面还有3Sum4Sum问题,以后如果想出个5Sum6Sum也不是不可以。总结来说,这类nSum问题就是给你输入一个数组nums和一个目标和target,让你从nums选择n个数,使得这些数字之和为target。那么,对于这种问题有没有什么好办法用套路解决呢?本文就由浅入深,层层推进,用一个函数来解决所有nSum类型的问题。
2024-08-31 00:13:00
939
原创 【算法思想·链表】如何判断回文链表
1、前言本文参考labuladong算法笔记[1、前言首先,寻找回文串是从中间向两端扩展,判断回文串是从两端向中间收缩。对于单链表,无法直接倒序遍历,可以造一条新的反转链表,可以利用链表的后序遍历,也可以用栈结构倒序处理单链表。具体到回文链表的判断问题,由于回文的特殊性,可以不完全反转链表,而是仅仅反转部分链表,将空间复杂度降到 O(1)。因为回文串长度可能为奇数也可能是偶数,长度为奇数时只存在一个中心点,而长度为偶数时存在两个中心点,所以上面这个函数需要传入l和r。而。
2024-08-25 22:05:10
678
原创 【算法思想·链表】单链表的花式反转方法汇总
反转单链表的迭代解法不是一个困难的事情,但是递归实现就有点难度了。如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能够同时用迭代和递归实现呢?再进一步,如果让你 k 个一组反转链表,阁下又应如何应对?本文就来由浅入深,一次性解决这些链表操作的问题。我会同时使用递归和迭代的方式,并结合可视化面板帮助你理解,以此强化你的递归思维以及操作链表指针的能力。2、反转整个单链表# 单链表节点的结构单链表反转是一个比较基础的算法题,力扣第 206 题「反转链表」就是这个问题。迭代解法。
2024-08-23 01:40:40
749
原创 【算法思想·链表】双指针技巧秒杀七道链表题目
毫不夸张地说,双指针法可以解决80%的链表题目,剩下的20%变变样子也可以用双指针解~尤其是快慢指针fast & slow,堪称链表大杀器!
2024-08-22 12:26:36
873
原创 【算法思想·数组】二分搜索终极模板
1、分析二分查找代码时,不要出现 else,全部展开成 else if 方便理解。2、注意「搜索区间」和 while 的终止条件,如果存在漏掉的元素,记得在最后检查。3、如需定义左闭右开的「搜索区间」搜索左右边界,只要在时做修改即可,搜索右侧时需要减一。4、如果将「搜索区间」全都统一成两端都闭,好记,只要稍改条件处的代码和返回的逻辑即可,推荐拿小本本记下,作为二分搜索模板。5、搜索区间时关于越界问题的思考:不管搜索左边界还是右边界,都要考虑数组的越界,既要考虑向左越界,又要考虑向右越界。搜索左边界。
2024-08-18 23:42:27
896
原创 【算法思想·数组】滑动窗口终极模板
滑动窗口本身思路上讲并不复杂,无非是left和right两个指针构建起一个动态window,再根据数据处理需要扩大或缩小窗口。但很多时候我们写滑动窗口总是难以尽善尽美,关键就在于对细节的把控,尤其是对窗口边界值处理不当和窗口变化机制的理解不够本文参考labuladong算法小抄[2、滑动窗口基本框架这个算法技巧的时间复杂度是 O(N),比字符串暴力算法要高效得多。这两个...处的操作分别是扩大和缩小窗口的更新操作,等会你会发现它们操作是完全对称的。
2024-08-18 18:45:22
710
原创 【算法思想·链表】构造链表
链表作为很常用的数据结构,很多同学在日常使用过程中或多或少都会遇到链表相关的问题,其中最常见的就是链表遍历和指针使用的问题。通过亲自手写链表,可以帮助我们深入理解链表。数据结构的工程化使用,无外乎就是增删查改,当我们亲手实现一次链表的功能,链表这个数据结构就算真正入门了。本文参考[
2024-08-15 11:35:33
746
原创 【算法思想·数组】双指针秒杀七道算法题
和。在数组中并没有真正意义上的指针,但我们可以把索引当做数组中的指针,这样也可以在数组中施展双指针技巧,。原地修改数组。
2024-08-12 14:50:43
900
原创 【算法思想·数组】差分数组
差分数组思想前缀和原始数组不会被修改。差分数组对原始数组进行增减差分数组思想比如说,我给你输入一个数组nums,然后又要求给区间nums[2..6]全部加 1,再给nums[3..9]全部减 3,再给nums[0..4]全部加 2,再给…一通操作猛如虎,然后问你,最后nums数组的值是什么?常规的思路很容易,你让我给区间nums[i..j]加上val,那我就一个 for 循环给它们都加上呗,还能咋样?这种思路的时间复杂度是 O(N),由于这个场景下对nums的修改非常频繁,所以效率会很低下。
2024-08-11 19:13:39
600
原创 代码随想录算法训练营day06 | 1. 两数之和,454. 四数相加 II,15. 三数之和,18. 四数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。若nums[i] == nums[i-1] 则 i += 1(i 右移), 若nums[j] = nums[j+1], 则 j -= 1(j左移)解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。
2023-06-15 20:47:09
99
1
原创 代码随想录算法训练营day05 | 242.有效的字母异位词, 349. 两个数组的交集, 202. 快乐数
2、遍历 nums1 和 nums2 两个列表里的每个数值,将其添加到tab1和tab2对应的位置。c. 遍历table, 若有位置的值不为0则说明该位置没有对冲的字母。3、遍历tab1和tab2,对应位置的数相乘若不为0则说明有交集。1、创建两个长度为1001的列表,tab1 和 tab2。b. 遍历两个字符串,字母对应的位置加加减减。a. 创建表示26个字母位置的table。中每个字符出现的次数都相同,则称。输出结果中的每个元素一定是。1、数据结构:列表 / 数组。[4,9] 也是可通过的。
2023-06-09 13:11:44
94
原创 代码随想录算法训练营day04 | 19. 删除链表的倒数第 N 个结点, 面试题 02.07. 链表相交, 142.环形链表II
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。[1,2,3,5][][1]思路:方法一:单指针遍历1、设链表总结点数为N, 则被删除的节点之前共有 N - n 个节点2、则指针cur遍历到第 N - n 个时 执行 cur.next = cur.next.next 即可方法二:间隔为 n+1 的双指针法:1、先建立双指针fast 和 slow2、fast向前移动 n+1 个节点3、fast 和 slow 一起向前移动,直到 fast指向 None。
2023-06-06 13:11:03
83
原创 代码随想录算法训练营day03 | 203.移除链表元素, 206.翻转链表, 24. 两两交换链表中的节点
e. a 和 b 两个指针指向 cur 后的两个节点,进行交换,注意与后续节点保持连接。d. 考虑到是两两交换节点,故每次移动cur,只处理cur 后的两个节点。输入:head = [1,2,6,3,4,5,6], val = 6。输入:head = [7,7,7,7], val = 7。输入:head = [], val = 1。输入:head = [1,2,3,4,5]输入:head = [1,2]输出:[1,2,3,4,5]输出:[5,4,3,2,1]输入:head = []
2023-06-05 00:57:16
94
1
原创 代码随想录算法训练营day02 | 977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。tips:range(i, j) 包含i不包含j, range(b, t-1, -1)是从b开始到t-1,不包含t-1,只到t(相当于数轴上从右往左数,左为开区间)输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]
2023-05-29 19:50:37
95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人