type
Post
status
Published
date
Jun 19, 2025
slug
code-note
summary
代码随想录刷题笔记
tags
推荐
技术
category
技术分享
icon
password
comment
Show
😀
2025.5.8 其实之前已经做了一些内容了,只是没系统整理,这里理论知识实际上都过了一遍,现在要系统性地刷题了,打算从力扣hot100和代码随想录入手,之后如果有时间再刷刷洛谷的

理论内容

我的Acwing笔记:
代码随想录:代码随想录
 
 

数组专题

二分搜索

常见易错点:
1.while内左右循环变量是否要加=
2.缩小区间时right=middle-1或者middle
解决方案:注意常见区间时左闭右闭还是左闭右开
左闭右闭:right=nums.size-1,while循环内加=,right=middle-1,left=middle+1
左闭右开:right=nums.size,while循环内left < right, right=middle, left=middle+1
 

移除元素

27. 移除元素 - 力扣(LeetCode)
27. 移除元素 - 给你一个数组 nums 和一个值 val,你需要 原地 [https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95] 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: * 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 * 返回 k。 用户评测: 评测机将使用以下代码测试您的解决方案: int[] nums = [...]; // 输入数组 int val = ...; // 要移除的值 int[] expectedNums = [...]; // 长度正确的预期答案。 // 它以不等于 val 的值排序。 int k = removeElement(nums, val); // 调用你的实现 assert k == expectedNums.length; sort(nums, 0, k); // 排序 nums 的前 k 个元素 for (int i = 0; i < actualLength; i++) { assert nums[i] == expectedNums[i]; } 如果所有的断言都通过,你的解决方案将会 通过。   示例 1: 输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2,_,_] 解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。 你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。 示例 2: 输入:nums = [0,1,2,2,3,0,4,2], val = 2 输出:5, nums = [0,1,4,0,3,_,_,_] 解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。 注意这五个元素可以任意顺序返回。 你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。   提示: * 0 <= nums.length <= 100 * 0 <= nums[i] <= 50 * 0 <= val <= 100
27. 移除元素 - 力扣(LeetCode)
 

有序数组的平方

 

长度最小的子数组

 

螺旋矩阵II

 

链表专题

移除链表元素

 

设计链表

707. 设计链表 - 力扣(LeetCode)
707. 设计链表 - 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。 实现 MyLinkedList 类: * MyLinkedList() 初始化 MyLinkedList 对象。 * int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。 * void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。 * void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。 * void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。 * void deleteAtIndex(int index) 如果下标有效,则删除链表中下标为 index 的节点。   示例: 输入 ["MyLinkedList", "addAtHead", "addAtTail", "addAtIndex", "get", "deleteAtIndex", "get"] [[], [1], [3], [1, 2], [1], [1], [1]] 输出 [null, null, null, null, 2, null, 3] 解释 MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addAtHead(1); myLinkedList.addAtTail(3); myLinkedList.addAtIndex(1, 2); // 链表变为 1->2->3 myLinkedList.get(1); // 返回 2 myLinkedList.deleteAtIndex(1); // 现在,链表变为 1->3 myLinkedList.get(1); // 返回 3   提示: * 0 <= index, val <= 1000 * 请不要使用内置的 LinkedList 库。 * 调用 get、addAtHead、addAtTail、addAtIndex 和 deleteAtIndex 的次数不超过 2000 。
707. 设计链表 - 力扣(LeetCode)
 

反转链表

 

两两交换链表中的节点

 

删除链表的倒数第 N 个结点

 

链表相交

面试题 02.07. 链表相交 - 力扣(LeetCode)
面试题 02.07. 链表相交 - 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: [https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/14/160_statement.png] [https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/14/160_statement.png] 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。   示例 1: [https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/14/160_example_1.png] [https://assets.leetcode.com/uploads/2018/12/13/160_example_1.png] 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Intersected at '8' 解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。 从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。 在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。 示例 2: [https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/14/160_example_2.png] [https://assets.leetcode.com/uploads/2018/12/13/160_example_2.png] 输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1 输出:Intersected at '2' 解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。 从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。 在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。 示例 3: [https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/14/160_example_3.png] [https://assets.leetcode.com/uploads/2018/12/13/160_example_3.png] 输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2 输出:null 解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。 由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。 这两个链表不相交,因此返回 null 。   提示: * listA 中节点数目为 m * listB 中节点数目为 n * 0 <= m, n <= 3 * 104 * 1 <= Node.val <= 105 * 0 <= skipA <= m * 0 <= skipB <= n * 如果 listA 和 listB 没有交点,intersectVal 为 0 * 如果 listA 和 listB 有交点,intersectVal == listA[skipA + 1] == listB[skipB + 1]   进阶:你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?
面试题 02.07. 链表相交 - 力扣(LeetCode)
 

环形链表 II

142. 环形链表 II - 力扣(LeetCode)
142. 环形链表 II - 给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 不允许修改 链表。   示例 1: [https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist.png] 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: [https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test2.png] 输入:head = [1,2], pos = 0 输出:返回索引为 0 的链表节点 解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: [https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test3.png] 输入:head = [1], pos = -1 输出:返回 null 解释:链表中没有环。   提示: * 链表中节点的数目范围在范围 [0, 104] 内 * -105 <= Node.val <= 105 * pos 的值为 -1 或者链表中的一个有效索引   进阶:你是否可以使用 O(1) 空间解决此题?
142. 环形链表 II - 力扣(LeetCode)
 

哈希表专题

有效的字母异位词

 

两个数组的交集

 

快乐数

 

两数之和

 

四数相加 II

 

赎金信

 

三数之和

 

四数之和

 

字符串专题

反转字符串

Acwing算法基础课浅谈软件设计模式
Loading...
Samuel Hu
Samuel Hu
沪上985软工在读 喜欢写代码 爱折腾的混子
小红书
统计
文章数:
24
公告

你好呀!👋

🎓 同济大四 + 浙大研0
🔍 我的研究聚焦在 AISE(AI for Software Engineering) 领域✨
🤖 具体方向有两个特别让我着迷的:
  • Code Reasoning 🧠💻
  • Code Generation ✨📝
💡 我相信AI与软件工程的结合会改变未来的开发方式,很开心能在这个交叉领域学习成长~
👥 欢迎大家多多交流!💬