
LeetCode
黄胶鞋和七分裤
为恶畏人知,恶中犹有善路,为善而急人知,善处即是恶根
展开
-
LeetCode 的 C++ 实现(十一)移除链表元素
题目描述 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 哨兵节点 ListNode* removeElements(ListNode* head, int val) { ListNode* dummy = new ListNode(0); dummy->next = head; ListN原创 2020-05-12 23:34:22 · 265 阅读 · 0 评论 -
LeetCode 的 C++ 实现(十)删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 暴力解法 class Solution { public: ListNode* removeNthFromEnd(...原创 2020-04-25 23:04:59 · 222 阅读 · 0 评论 -
LeetCode 的 C++ 实现(九)合并两个有序链表
题目 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 非递归 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* Dum...原创 2020-02-17 22:58:29 · 221 阅读 · 0 评论 -
LeetCode 的 C++ 实现(八)两数之和(二)
题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 ...原创 2019-11-25 23:18:31 · 148 阅读 · 0 评论 -
LeetCode 的 C++ 实现(八)两数之和
题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 暴力解法 c...原创 2019-10-21 23:49:32 · 198 阅读 · 0 评论 -
LeetCode 的 C++ 实现(六)环形链表 ,判断环是否存在
题目 给定一个链表,判断链表中是否有环。 快慢指针 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution ...原创 2019-10-21 15:02:56 · 235 阅读 · 0 评论 -
LeetCode 的 C++ 实现(七)环形链表(2) ,判断环是否存在,同时找到入口
题目 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 Floyd算法思路 1、通过快慢指针来判断是否存在环 2、 入环前的距离是F,第一次点h,以该点将环分割,两段分别距离分别为a 和 b。 可以得到公式: 2(F + a) = F + N(a + b) + a 2F + 2a = F + 2a + b + (N - 1)(a + b) F = b + (N - 1...原创 2019-10-21 14:52:54 · 217 阅读 · 0 评论 -
LeetCode 的 C++ 实现(五)链表逆序
题目 将给定的单链表L: L 0→L 1→…→L n-1→L n, 重新排序为: L 0→L n →L 1→L n-1→L 2→L n-2→… 要求使用原地算法,并且不改变节点的值 例如: 对于给定的单链表{1,2,3,4},将其重新排序为{1,4,2,3}. Given a singly linked list L: L 0→L 1→…→L n-1→L n, reorder it to: L 0...原创 2019-10-20 23:51:39 · 187 阅读 · 0 评论 -
LeetCode 的 C++ 实现(四)插入排序对链表进行排序的各类实现
题目 使用插入排序对链表进行排序。 Sort a linked list using insertion sort. 基础插入排序 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x),...原创 2019-10-20 22:49:18 · 128 阅读 · 0 评论 -
LeetCode 的 C++ 实现(三)链表排序(要求空间复杂度和时间复杂度)
题目 在O(n log n)的时间内使用常数级空间复杂度对链表进行排序。 Sort a linked list in O(n log n) time using constant space complexity. 思路 由于题目要求空间复杂度是 O(1),因此不能使用递归。因此这里使用 bottom-to-up 的算法来解决。 bottom-to-up 的归并思路是这样的:先两个两个的 merg...原创 2019-10-20 15:37:55 · 419 阅读 · 0 评论 -
LeetCode 的 C++ 实现(二) 逆波兰式(后缀表达式求解)
解题思路 根据后缀表达式概念,借助栈,不断将字符入栈,当碰到当前字符是运算符,就将已入栈的左右数值弹出,求得结果后,将结果入栈 class Solution { public: int evalRPN(vector<string> &tokens) { if(tokens.size() == 0) return 0; ...原创 2019-10-17 00:22:19 · 191 阅读 · 0 评论 -
LeetCode 的 C++ 实现(一) :求给定二叉树的最小深度,最小深度是指树的根节点到最近叶子结点的最短路径上的数量
题目描述 求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。 Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf...原创 2019-10-16 11:10:43 · 552 阅读 · 0 评论