Leetcode刷题
wyg1997
恰如猛虎卧荒丘,潜伏爪牙忍受。
展开
-
【Leetcode】26.只出现一次的数字III(位运算)
题目链接点击打开链接题目描述题解两个位运算异或:两个相同的数异或结果为0;0和任意值异或结果为那个数。x&(-x):结果为x的二进制位的最后一位。举个例子(第一位为符号位):10 -> (0 00000…000 1010)b-10 -> (1 11111…111 0110)b负数的二进制变换方式是:1. 按位取反。 2. 末位加1。这时两个数进行...原创 2020-04-15 11:53:15 · 481 阅读 · 0 评论 -
【Leetcode】23.合并K个排序链表(最小堆)
题目链接点击打开题目题目描述题解有多种方法,这个题我使用最小堆的方法。首先了解一下最小堆的概念:最小堆 构建、插入、删除的过程图解解题步骤首先以各链表的头指针为结点构建一棵完全二叉树。按最小堆的形式整理二叉树。取二叉树的根结点,连在结果链表后。用根结点所在链表的下一个结点作为根结点,并重新更新为最小堆。如果没有下一个结点了,则填入一个正无穷结点。重复第3步,直到根结点为正...原创 2020-04-14 20:17:42 · 555 阅读 · 0 评论 -
【Leetcode】144.二叉树的前序遍历(非递归,Morris算法)
题目链接点击打开题目链接题目描述题解递归递归的解法非常简单,代码也比较精简。时间复杂度为O(n)O(n)O(n),空间复杂度为O(n)O(n)O(n)。dfs用栈(Stack)来保存结点,类似递归。时间复杂度为O(n)O(n)O(n),空间复杂度为O(n)O(n)O(n)。Morris算法这个算法每个结点需要遍历2次,所以时间复杂度要比之前两种高一些,但是空间复杂度仅为O(1)...原创 2020-03-11 12:05:50 · 388 阅读 · 0 评论 -
【Leetcode】142.环形链表-ii(快慢指针)
题目链接点击打开链接题目描述题解是否是循环链表使用快慢指针法,慢指针一次走1个结点,快指针一次走2个结点,从头开始走会出现下面两种情况:快指针变成NULL,说明链表不循环。快慢指针相遇,说明链表循环,但循环节的起始位置未知。注意这里快指针走的路程是慢指针走的路程的2倍。找出循环节的起始位置上一步相遇的位置是个关键,在这一结点上,快指针走的路程 = 慢指针走的路程 *...原创 2020-03-09 18:39:48 · 239 阅读 · 0 评论 -
【Leetcode】137.只出现一次的数字(逻辑运算推导)
题目链接点击打开链接题目描述解题思路首先我们分析一下题意,一个数组中只有一个数出现了1次,其余的数都出现了3次。并且要求O(n)O(n)O(n)的时间复杂度和O(1)O(1)O(1)的空间复杂度。也就是不能用线性表、HashSet、HashMap这些数据结构了。解法一这题还是从二进制位来考虑,分以下2种情况:如果这个二进制位出现了3n次1(3次、6次、9次等),那么就说明结果在这...原创 2020-03-06 11:55:44 · 426 阅读 · 1 评论 -
【Leetcode】5.最长回文子串(Manacher算法)
题目链接点击打开题目题目描述题解这题二刷的时候又忘了怎么做了,实在是不应该,以后还得用博客记一下。常规做法就是以每个字母为中心,向两个方向搜索结果,时间复杂度为O(n2)O(n^2)O(n2)。而Manacher(马拉车?)算法是一个高效且巧妙的O(n)O(n)O(n)算法。算法核心思想因为是回文串,所以串的对称位置上的字符可以算法步骤预处理字符串:把字符串每个字符中间...原创 2020-03-02 16:59:50 · 233 阅读 · 0 评论