
LeetCode
文章平均质量分 93
zxfhahaha
这个作者很懒,什么都没留下…
展开
-
第一页总结
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。递归思路:每一个子递归都将当前节点下一个节点的下一个节点指向当前节点,当前节点的下一个节点置空。递归终止条件:head为空或head.next为空。迭代思路:用pre和cur两个指针遍历链表给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。原创 2024-06-15 22:05:49 · 850 阅读 · 0 评论 -
【LeetCode】回溯
主要就是在选择前先把不能选的排除调,比如全排列是要排除掉已经选了的数字,n皇后是要把当前列,左上角斜线和右上角斜线 有皇后的排除掉。输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]做选择的时候要把当前位置不能放皇后的排除掉,排除的方法就是看当前列,左上角斜线,右上角斜线有没有皇后。n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。原创 2024-03-22 17:56:16 · 664 阅读 · 0 评论 -
【LeetCode】总结
和反转全部的区别其实是要记住【不参与反转的第一个节点】,如何得到不参与反转的第一个节点,就是递归到basecase也就是n=1的下一个节点。反转M-N可以转换成 反转前N,只需将head向前移动到left为1就是反转前N了。设置两个指针prev和cur,prev指向head的前一个节点,cur指向head。原创 2024-02-23 16:58:42 · 477 阅读 · 0 评论 -
【LeetCode】二分法总结
二分法总结33. 搜索旋转排序数组33. 搜索旋转排序数组整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,原创 2021-07-13 16:45:48 · 613 阅读 · 0 评论 -
【LeetCode】数组
31、下一个排列31、下一个排列31、下一个排列实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输原创 2021-07-13 15:32:39 · 427 阅读 · 0 评论 -
【LeetCode】位运算
位运算java移位运算符总结通过异或136. 只出现一次的数字.java剑指offer 56-1 数组中数字出现的次数剑指offer 56-2 数组中数字出现的次数2很多题目都和位运算相关,但是自己可能看到一些题目会想不到位运算,这里就总结一下。java移位运算符总结<< : 左移运算符,num << 1,相当于num乘以2>> : 右移运算符,num >> 1,相当于num除以2>>> :原创 2021-07-12 20:26:08 · 163 阅读 · 1 评论 -
【LeetCode】dfs和bfs
dfs和bfsdfsdfs解决的问题剑指 Offer 38. 字符串的排列Acwing排列数字参考:lzh【算法学习笔记】17:DFS与BFSdfsdfs解决的问题深度优先搜索常用于解决需要给出所有方案的问题,因为它的搜索顺序就是能够得到一个完整的搜索路径(方案)后回退再去搜索其它的方案。剑指 Offer 38. 字符串的排列输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb原创 2021-06-22 21:41:45 · 419 阅读 · 0 评论 -
【LeetCode】树与图的dfs和bfs
参考:lzh的笔记树与图的存储结构:邻接表由于树是特殊的图,所以我们存储树也是用的邻接表或邻接图。邻接表是指对于图上的每个结点来说,用一个单链表存储它的临接点。我们需要h[],e[],ne[],idx来表示这个邻接点:h[v] : 指向节点v形成的链表的头节点注意初始化为-1e[i] : 第i个点的值v(表示下标和值的映射)ne[i] : 表示邻接表链表中 i 节点的下一个节点idx : 当前遍历到的节点的索引,等边都插入完idx就是节点个数在节点a的后面插入b:idx为当前遍历原创 2021-06-22 20:01:36 · 442 阅读 · 1 评论 -
【LeetCode】拓扑排序
拓扑排序拓扑排序 模板AcWing 848. 有向图的拓扑序列拓扑排序 模板拓扑排序用bfs来访问所有的节点,把入度为0的节点加入到队列中;每次从队列中取出一个节点,相当于从图删除这个节点,这样此节点的后继节点的入度都减1,再把入度为0的节点加到队列中。时间复杂度时间复杂度 O(n+m)O(n+m), nn 表示点数,mm 表示边数java 模板AcWing 848. 有向图的拓扑序列【题目描述】给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该原创 2021-06-18 16:59:41 · 1217 阅读 · 0 评论 -
【LeetCode】字符串总结
65. 有效数字思路: class Solution { public boolean isNumber(String s) { int n = s.length(); char[] cs = s.toCharArray(); int idx = -1; // 通过 e/E 对字符串进行分割 for (int i = 0; i < n; i++) {原创 2021-06-17 16:02:39 · 394 阅读 · 0 评论 -
【LeetCode】动态规划系列总结
动态规划系列总结用到dp的题目类型解题套路322. 零钱兑换参考:labuladong的算法小抄用到dp的题目类型动态规划问题的一般形式都是求最值解题套路动态规划三要素:重叠子问题最优子结构状态转移方程核心思想就是穷举所有可行解求最值—>列出正确的「状态转移方程」得到状态转移方程:状态转移方程其实就代表着暴力解,然后用DP table 优化明确 base case明确「状态」原问题和子问题中会变化的变量明确「选择」导致状态变化的行为定义 dp 数组/函数的含义原创 2021-06-01 00:57:32 · 703 阅读 · 1 评论 -
【LeetCode】双指针
双指针双指针场景例题26. 删除有序数组中的重复项15. 三数之和双指针场景例题26. 删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// num原创 2021-05-07 21:45:56 · 374 阅读 · 0 评论 -
【LeetCode】单调栈相关题目总结
单调栈单调栈用单调栈的类型42. 接雨水496. 下一个更大元素 I503. 下一个更大元素 II单调栈用单调栈的类型42. 接雨水42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。提示:n == height.length0 <= n <= 3 * 1040 <= height[i] <= 105思路:有坑才能接住雨水,所谓的坑其实就是有左右两个边界,那我们只要找到每个坑的边界,就可以通过这个边原创 2021-05-06 14:25:49 · 741 阅读 · 0 评论 -
【LeetCode】滑动窗口系列总结
滑动窗口系列总结用到滑动窗口的类型滑动窗口模板我们要修改的点例题76. 最小覆盖子串排列相关567. 字符串排列438. 找到字符串中所有字母异位词3. 无重复字符的最长子串904. 水果成篮用到滑动窗口的类型滑动窗口模板我们要修改的点扩张窗口时(right++) 如何更新窗口数据收缩窗口的条件收缩窗口时(left–)如何更新窗口数据一般收缩和扩张更新数据都是对应的注意更新答案的地方:明确我们需要的答案在哪部分,例如3.无重复最长子串,我们需要的答案就是在收缩完窗口才保证窗原创 2021-03-28 23:35:56 · 1049 阅读 · 0 评论 -
【LeetCode】链表专题总结
LeetCode链表专题总结双指针找链表的中间结点(快慢指针)获取倒数第k个元素(快慢指针)环形链表判断链表是否有环返回链表开始入环的第一个节点判断环的长度反转链表反转整个链表反转链表前N个节点反转单链表的一部分回文链表重排链表相交链表链表排序问题链表经典题目两数相加合并链表合并两个有序链表合并k个排序链表基础操作插入节点删除节点删除单向链表中间的某个节点删除p节点后面的元素双指针找链表的中间结点(快慢指针)通过快慢指针fast 和slow 都从head开始,fast走两步,slow走一步,当fast原创 2021-02-20 23:43:52 · 508 阅读 · 1 评论 -
【LeetCode】二叉树知识点总结
二叉树知识点总结基本操作题目的问法知道怎么写代码二叉树的知识路径(路径和,路径上相同的值之类的)遍历递归(前序、中序、后序)迭代莫里斯遍历:利用线索二叉树的特性进行遍历N叉树的前序遍历二叉搜索树完全二叉树常用方法用栈来维护从根节点到当前节点的所有节点基本操作创建值为v的节点 TreeNode* node = new TreeNode(v)让S是T的左节点 T->left=S;二叉树遍历框架,典型的非线性递归遍历结构:/* 基本的二叉树节点 */class TreeNode {原创 2020-08-18 20:34:52 · 937 阅读 · 1 评论 -
【LeetCode】字符串汇总
字符串汇总每一位相加 进位415. 字符串相加67. 二进制求和每一位相加 进位这一类型题都是对每一位的数相加,然后余数是相加得到的结果,商是进位;不够的补零415. 字符串相加class Solution {public: string addStrings(string num1, string num2) { int cd=0; int s...原创 2019-11-24 11:15:52 · 228 阅读 · 0 评论 -
【LeetCode】用数组实现hash表 3. 无重复字符的最长子串
@TOC[]用数组实现hash表当我们需要字符及其位置的时候,我们首先想到的是用hash表存,但是hash表很慢还费内存,我们可以用数组实现一个简易的hash表,用数组的下标作为键key,数组的内容作为值value。具体实现s是一串字符,我们为了存储字符串每个字符及其对应的位置,我们可以用一个大小为256的数组,即所有字符的ASCII码,具体实现如下。string s="abcd";v...原创 2019-11-13 11:29:36 · 237 阅读 · 0 评论 -
【LeetCode】用hash set解决问题:817. 链表组件
set用hash set解决问题题目给定一个链表(链表结点包含一个整型值)的头结点 head。同时给定列表 G,该列表是上述链表中整型值的一个子集。返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 G 中)构成的集合。示例 1:输入:head: 0->1->2->3G = [0, 1, 3]输出: 2解释:链表中,...原创 2019-10-17 18:20:25 · 195 阅读 · 0 评论 -
【LeetCode】用栈解决问题:1019. 链表中的下一个更大节点
本篇文章主要记录一下如何用栈来解决问题下面看一个链表的题目1019. 链表中的下一个更大节点给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, … 。每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j.val,那么就有 ...原创 2019-10-16 20:40:33 · 917 阅读 · 0 评论 -
【LeetCode】 链表
83. 删除排序链表中的重复元素题目描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3方法一 迭代思路遍历结点,如果当前结点值和下一个结点值相等,则删除下一个结点;否则继续遍历下一个结点代码...原创 2019-10-06 13:39:47 · 185 阅读 · 1 评论 -
【LeetCode】初级专题-链表
链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。删除链表中的结点题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释:...原创 2019-09-30 10:27:50 · 141 阅读 · 0 评论 -
【LeetCode 字符串】 整数反转 c++
题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2312^{31}231, 2312^{31}231 − 1]。请根据这个假设,如果反转后整数溢出那么就返...原创 2019-09-26 22:04:34 · 205 阅读 · 0 评论 -
【LeetCode】 存在重复
题目给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true方法一思路然后想到了python有内置的set...原创 2019-09-16 19:57:28 · 153 阅读 · 0 评论