随笔分类 - LeetCode
摘要:1. 题目 2. 解答 我们需要先找到第 m 个结点及其上一个结点,然后将从 m 到 n 的结点进行反转,最后依次将 m 到 n 反转后的结点和 n 之后的结点放入原链表中即可。 从前往后依次遍历 m 1 次即可找到第 m 个结点,然后我们开始将第 m 到第 n 个结点倒序放入一个新链表,也即每次都
阅读全文
摘要:1. 题目 2. 解答 从前向后遍历链表,将结点值小于 x 的结点放入到新链表 1 中,将结点值大于等于 x 的结点放入新链表 2 中。最后,将新链表 2 拼接在新链表 1 后面即可。 获取更多精彩,请关注「seniusen」!
阅读全文
摘要:1. 题目 2. 解答 新建一个链表,并添加一个哨兵结点,从前向后开始遍历链表。 如果下一个结点的值和当前结点的值相等,则循环向后遍历直到找到一个和当前结点值不相等的结点; 反之,如果下一个结点的值和当前结点的值不相等,此值即为原始链表中没有重复出现的数字,将其加入到新链表中。 然后继续向后遍历。最
阅读全文
摘要:1. 题目 2. 解答 从前向后遍历链表,如果下一个结点的值和当前结点的值相同,则删除下一个结点,否则继续向后遍历。 获取更多精彩,请关注「seniusen」!
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 将链表每个节点向右移动 1 个位置,其实就是让链表最后一个结点指向第一个结点。 因此,向右移动 k 个位置就重复上述过程 k 次即可。 然后,我们注意到,若链表有 n 个结点,则移动 n 次后就还是原链表。 实际上,若链表有 n 个结点,我们只需要移动 n
阅读全文
摘要:1. 题目 2. 解答 新建一个哨兵结点作为头结点,然后每次交换相邻两个结点。并依次将它们连接到新链表中去,再将原链表中后面的结点也串到新链表后面。直至到达链尾或者剩余一个节点,则此时返回新链表的头结点,也即是原始链表的第二个结点。 获取更多精彩,请关注「seniusen」!
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 由于两个数组都是排好序的,因此首先可以想到的思路就是利用归并排序把两个数组合并成一个有序的长数组,然后直接取出中位数即可。 c class Solution { public: double findMedianSortedArrays(vector& nu
阅读全文
摘要:1. 题目 2. 解答 将数独中数字的 ASCII 码值转化到 0 8 之间作为散列值,建立一个散列表,然后分别逐行、逐列、逐宫(3 3小块)统计每个数字的出现次数,若出现次数大于 1,则数独无效。 上面的方法需要对数独遍历三次,我们也可以做到在遍历一次的情况下判断数独是否有效。 针对每行、每列和每
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 我们从前往后遍历字符串,start 代表最长子串的起始位置,一开始设置为零。 如果没有遇到重复字符,则更新子串的长度,向后遍历。 如果遇到重复字符时,则更新字符串起始位置为 上一个相同字符的后面一个位置 ,同时更新子串长度。 重复上面这个过程,直到遍历完毕。
阅读全文
摘要:1. 题目 2. 解答 若矩阵为空,比如 [], [[]],此时直接返回 false。 若目标值小于矩阵第一个元素或者大于矩阵最后一个元素,则目标值不在矩阵范围内,直接返回 false。 其他情况下,则从矩阵第一行开始逐行扫描。若目标值位于矩阵某一行数值范围内,再针对矩阵的某一行用二分查找精准定位。
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 将 s 和 t 转化为 Python 的列表,然后遍历列表 s 的元素, 将它们从列表 t 中删除,最后列表 t 中会余下一个元素,即为所求 。 2.2. 方法二 将 t 转化为 Python 的集合,由于集合元素的互异性,这个过程会去掉重复元素,然后再将其
阅读全文
摘要:1. 题目 2. 解答 循环遍历两个链表 若两个链表都非空,将两个链表结点的值和进位相加求出和以及新的进位 若其中一个链表为空,则将另一个链表结点的值和进位相加求出和以及新的进位 然后将每一位的和添加到新链表中。 如果 有一个链表为空,且此时进位为 0 ,我们则只需要将非空链表后面的值复制到新链表即
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 基于 "LeetCode 33——搜索旋转排序数组" 中的方法二。 当 nums[mid] = nums[right] 时,比如 [1, 1, 2, 1, 1],[1, 1, 0, 1, 1],为了找到正确的转折点, 我们查看 [mid, right] 之间
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 直接进行二分查找,在判断查找方向的时候详细分类。 当 nums[mid] nums[mid] = nums[left],则向左查找。 若 nums[right] target 时, 若 nums[mid] nums[right],此时 nums[mid] 两
阅读全文
摘要:1. 题目 2. 解答 此题目为 "今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道——最小分割分数" 。 c class Solution { public: // 若分割数组的最大值为 value,判断能否进行划分 bool cansplit(vector& nums,
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 题目要求不能使用乘法、除法和除余运算,但我们可以将 除法转移到对数域 。 $$ \frac{a}{b} = e^{\frac{lna}{lnb}} = e^{lna lnb}$$ 这样就转化为指数、对数和减法运算了。因为只能对正整数取对数,因此我们首先要将两
阅读全文
摘要:1. 题目 2. 解答 首先,利用快慢指针确定链表的总结点数。 偶数个结点时,结点个数等于 i 2。 奇数个结点时,结点个数等于 i 2 + 1。 然后将链表的每 K 个结点划分为一组。循环对每组的子链表进行 "翻转" ,并依次拼接起来。 最后,将多余的结点拼接在新链表最后面即可。 代码如下 获取更
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 在 "合并两个有序链表" 的基础上,我们很容易想到第一种解法,首先我们将第一个链表和第二个链表合并成一个新的链表,然后再往后依次合并接下来的每个链表即可。 假设每个链表结点数一样都为 n,第一次合并时,要遍历 2n 个结点,往后则要分别遍历 3n, 4n,
阅读全文
摘要:1. 题目 2. 解答 新建一个带有哨兵结点的链表,依次比较两个有序链表的结点值,将较小值的结点插入到新链表后面。直到其中一个比较完毕,将另一个链表剩余的结点全部放到新链表最后面即可。最后,可以删除哨兵结点,或者直接返回哨兵结点后第一个结点指针。 获取更多精彩,请关注「seniusen」!
阅读全文
摘要:1. 题目 2. 解答 因为给定的只有一个待删除的结点指针,我们并不知道其前面结点,所以需要将待删除结点后面的结点值复制到前面结点去,然后指向其后的第二个结点即可。 获取更多精彩,请关注「seniusen」!
阅读全文

浙公网安备 33010602011771号