
反转链表
前言 近期小伙伴群里各种反转链表题目,你说这个算法,嗯~ 还挺有意思的! 我也来做一做吧! 1 反转单链表 解题思路 使用两个临时变量,分别标记反转过程中的两个链表的头。 我也就虐虐这种 Easy 的。 2 反转 m 到 n 的链表 解题思路 1. 先定位到 left 和 leftPrev 节点 2. 反转 3. 结束 3 K 个一组翻转链表 还有!一个链表翻来翻去 ……
12 篇相关内容

前言 近期小伙伴群里各种反转链表题目,你说这个算法,嗯~ 还挺有意思的! 我也来做一做吧! 1 反转单链表 解题思路 使用两个临时变量,分别标记反转过程中的两个链表的头。 我也就虐虐这种 Easy 的。 2 反转 m 到 n 的链表 解题思路 1. 先定位到 left 和 leftPrev 节点 2. 反转 3. 结束 3 K 个一组翻转链表 还有!一个链表翻来翻去 ……

1. 两数之和 题目 题解 暴力枚举 直接遍历出所有的可能性,一一比较。 很显然这种方式不会很快,因为双层遍历,时间复杂度为 $O(n^2)$。 哈希表 只需要将已经遍历过的值放在 Hash 表中。 K:存放 target - 当前值 V:存放当前 index 这样只需要判断是否在 Hash 表中即可。

题目 题解 - 考察的是位运算 —— 异或(^),相同为 0,不同为 1 - 1^0 = 1,1^1 = 0 - 则直接对数据所有元素执行 ^ 操作,最终的就是结果

题目 题解 方法一 - 直接用哈希表出现 3 次则从哈希表移除,最后剩下的就是结果 方法二 - 其余元素都出现三次,其中某个元素只出现一次,将每个元素都转化为二进制,则可能的结果为 4 个数都相同或者 3 个数都相同 - 同一位结果可能为 0000、1111、0001、1110 - 通过位运算得出所有该位的和,对 3 进行取模则得出结果数字该位的值

题目 题解 - 默认对所有天数填写默认值,即都抽 1 号湖泊 - 用 Map 存储湖泊编号和下雨天的对应关系 - 把所有的空闲日子(不下雨的天数)存起来,注意要使用 TreeSet,因为后面需要进行比较 - 遍历数组 - 不下雨:将 i 天存储到 TreeSet 中,等后面再选择这一天抽哪个湖泊 - 下雨:如果下雨的湖泊已经有水,则判断有水后至今期间有没有空闲日子 - 有空闲:设置那天为抽水,并移除该空闲日子,使用 TreeSet.ce

题目 题解 Map + Map Map + 二维数组

题目 题解 - 直接使用双指针,依次拼接 - 如果指针结束指向同一个数,则再加上该数

题目 题解 题解一 - 直接使用 HashSet 判断 题解二 - 对数组所有元素求异或,得到的值为那两个不同元素的异或结果 - 明确那两个数肯定不同,所以肯定有的位数异或后结果为 1 - 假如第 x 位异或的结果为 1,即所有数的 x 位异或结果为 1 - 找到 x 的最小值 - 现在数组中只有两类数:x 位为 0 的,和 x 位为 1 的,并且这两个不同的数的 x 位还不同 - 通过 & 操作,将数组氛围两类 - 最后问题拆解为 1

题目 题解 必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 所以只能修改原数组。 题解一: 直接对满足 numsi == val 的值进行依次覆盖即可。 题解二: 元素的顺序可以改变 因为对顺序没有要求,所以可以直接使用数组尾部的值覆盖前面的值。

题目 题解 - i、j、k 可以不连续,所以不能够使用滑动窗口 - $O(n)$ ,空间复杂度为 $O(1)$ 表示只能遍历一次 - 假设 first 和 second 是有序的,且开始 first second 就会满足条件 - first third,则将 first 进行赋值为 third,因为在数组中肯定有比 second 小的数

题目 题解 只要通过遍历获得最大和第二大的数即可。

题目 题解 - 小于 0 肯定不满足条件 - 大于 0 且尾数为 0,则不满足条件 题解一: 直接转换成字符串,然后 reverse 比较一下。但是题目中有写: 进阶:你能不将整数转为字符串来解决这个问题吗? 所以肯定不能使用这种方式! 题解二: - 对数字进行反转 题解三: - 既然是回文数,那就反转一半的数字即可 - 如何知道反转到一半了 - tmp 不断减少位数,当 tmp 小于 res 时,说明反转到一半或者一半过一位了 - 总