![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode题解
zzzfeiyu
这个作者很懒,什么都没留下…
展开
-
【LeetCode题解】190. 颠倒二进制位、191. 位1的个数
颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 00...原创 2019-09-04 22:24:56 · 114 阅读 · 0 评论 -
【LeetCode题解】198.打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 ...原创 2019-09-04 23:12:13 · 253 阅读 · 0 评论 -
【LeetCode题解】199. 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <---/ \2 3 <---\ \ 5 4 <---题解:从二叉树根结点开始...原创 2019-09-05 07:49:06 · 210 阅读 · 0 评论 -
【LeetCode题解】200. 岛屿数量
给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1题解:本题参考官方题解,当出现'1'的时候,将与此'1'相连的所有'1'全部改写为0,并将岛屿记数器+1,相当于每次遍历一整座...原创 2019-09-05 15:48:44 · 165 阅读 · 0 评论 -
【LeetCode题解】202. 快乐数
编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。示例:输入: 19输出: true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 0...原创 2019-09-05 16:26:52 · 250 阅读 · 0 评论 -
【LeetCode题解】204. 计数质数
统计所有小于非负整数n的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。题解:version1:检验一个数n是否是质数,只要将n对2到n-1判断取余是否为0即可 根据定理 2到n-1判断取余可缩小至2到 根号(n-1)之间 又 2到根号(n-1)之间可以表示:2到n-1之间的质数 可以优化为:...原创 2019-09-06 14:28:04 · 100 阅读 · 0 评论 -
【LeetCode题解】207. 课程表
现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的...原创 2019-09-07 11:19:22 · 420 阅读 · 0 评论 -
【LeetCode题解】209. 长度最小的子数组
给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组[4,3]是该条件下的长度最小的连续子数组。进阶:如果你已经完成了O(n) 时间复杂度的解法, 请尝试O(n log n) 时间复杂度...原创 2019-09-07 21:31:17 · 421 阅读 · 0 评论 -
【LeetCode题解】210. 课程表 II
现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例1:输入: 2, [[1,0]]...原创 2019-09-08 21:59:40 · 235 阅读 · 0 评论 -
【LeetCode题解】208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"...原创 2019-09-09 08:13:16 · 207 阅读 · 0 评论 -
【LeetCode题解】189. 旋转数组
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1,-100,3,99] ...原创 2019-09-04 20:39:45 · 132 阅读 · 0 评论 -
【LeetCode题解】187. 重复的DNA序列
所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。示例:输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出: ["AAAAACCCCC", "CCCC...原创 2019-09-04 10:23:11 · 249 阅读 · 0 评论 -
【LeetCode题解】141. 环形链表
给定一个链表,判断链表中是否有环。题解:前后指针,前指针每次前进2步,后指针每次前进1步,如果有环则一定碰撞public class Solution { public boolean hasCycle(ListNode head) { if(head == null){ return false; } ...原创 2019-08-29 21:56:08 · 96 阅读 · 0 评论 -
【LeetCode题解】144. 二叉树的前序遍历
给定一个二叉树,返回它的前序遍历。题解:遍历顺序为visit,left,right 用栈存储右节点,无左节点弹栈,循环class Solution { public List<Integer> preorderTraversal(TreeNode root) { //visit,left,right List<Integ...原创 2019-08-29 22:19:13 · 86 阅读 · 0 评论 -
【LeetCode题解】125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。题解:双指针,过滤掉非字母和数字的字符 原来在 'Z' 到 'a'中间还有6个字符class Solution { public boolean isPalindrome(String s) { int l=0, r=s.length()-1; while(l&l...原创 2019-08-31 22:44:09 · 88 阅读 · 0 评论 -
【LeetCode题解】143. 重排链表
给定一个单链表L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列...原创 2019-09-01 12:20:41 · 97 阅读 · 0 评论 -
【LeetCode题解】147. 对链表进行插入排序
对链表进行插入排序。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。题解:用[ pre, cur, post]遍历整个链表 取出cur,将pre与cur中间截断【因为无指针比较,如果pre直接与post连接,...原创 2019-09-01 16:38:29 · 121 阅读 · 0 评论 -
【LeetCode题解】148. 排序链表
在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3 输出: 1->2->3->4题解:O(nlogn)的排序有 快排、堆排序、归并排序 快排需要双指针不满足,堆排序难以建堆且空间复杂度不满足要求,选择归并排序 使用快慢指针将链表一分为二,对左右两个链表分别排序,再mergeList将右...原创 2019-09-02 07:29:33 · 105 阅读 · 0 评论 -
【LeetCode题解】150. 逆波兰表达式求值
根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9题解:...原创 2019-09-02 15:28:45 · 198 阅读 · 0 评论 -
【LeetCode题解】151. 翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出:"example go...原创 2019-09-02 15:43:07 · 182 阅读 · 0 评论 -
【LeetCode题解】153. 寻找旋转排序数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0题解:类似于二分查找的思想,[left,mid,right],每...原创 2019-09-03 07:32:39 · 80 阅读 · 0 评论 -
【LeetCode题解】173. 二叉搜索树迭代器
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。提示:next()和hasNext()操作的时间复杂度是O(1),并使用O(h) 内存,其中h是树的高度。你可以假设next()调用总是有效的,也就是说,当调用 next()时,BST 中至少存在一个下一个最小的数。题解:对于二叉搜索树来说...原创 2019-09-04 08:09:37 · 180 阅读 · 0 评论 -
【LeetCode题解】211. 添加与搜索单词 - 数据结构设计
设计一个支持以下两种操作的数据结构:void addWord(word)bool search(word)search(word)可以搜索文字或正则表达式字符串,字符串只包含字母.或a-z。. 可以表示任何一个字母。示例:addWord("bad")addWord("dad")addWord("mad")search("pad") -> falsesear...原创 2019-09-09 10:33:41 · 410 阅读 · 0 评论 -
【LeetCode题解】216. 组合总和 III
找出所有相加之和为n 的k个数的组合。组合中只允许含有 1 -9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]题解:首先考虑的是分治法,...原创 2019-09-10 22:20:05 · 290 阅读 · 0 评论 -
【LeetCode题解】47. 全排列 II
给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class So...原创 2019-09-23 17:23:52 · 124 阅读 · 0 评论 -
【LeetCode题解】50. Pow(x, n)
实现pow(x, n),即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 <x< 100.0n是 ...原创 2019-09-24 12:14:21 · 113 阅读 · 0 评论 -
【LeetCode题解】53. 最大子序和
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。来源:力扣(LeetCode)链接:https://leetco...原创 2019-09-24 14:58:06 · 94 阅读 · 0 评论 -
【LeetCode题解】69. x 的平方根
暴力解法:class Solution { public int mySqrt(int x) { for(int i=1 ; ; i++){ if(x/i<i){ return i-1; } } }}牛顿法:x*x = a可以转化为 x*x - a = ...原创 2019-09-28 22:08:43 · 87 阅读 · 0 评论 -
【LeetCode题解】165. 比较版本号
比较两个版本号 version1和 version2。如果version1>version2返回1,如果version1<version2 返回 -1, 除此之外返回 0。你可以假设版本字符串非空,并且只包含数字和. 字符。. 字符不代表小数点,而是用于分隔数字序列。例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。...原创 2019-10-01 14:47:39 · 257 阅读 · 0 评论 -
【LeetCode题解】221. 最大正方形
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注...原创 2019-10-06 18:53:29 · 136 阅读 · 0 评论 -
【LeetCode题解】227. 基本计算器 II
实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格。 整数除法仅保留整数部分。示例1:输入: "3+2*2"输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函数 eval。...原创 2019-10-07 21:16:56 · 234 阅读 · 0 评论 -
【LeetCode题解】228. 汇总区间
给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。示例 1:输入: [0,1,2,4,5,7]输出: ["0->2","4->5","7"]解释: 0,1,2 可组成一个连续的区间;4,5 可组成一个连续的区间。示例 2:输入: [0,2,3,4,6,8,9]输出: ["0","2->4","6","8->9"]解释: 2,3,4 可组成一个...原创 2019-10-08 19:15:44 · 165 阅读 · 0 评论 -
【LeetCode题解】230. 二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \1 4 \ 2输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1],...原创 2019-10-08 21:14:57 · 203 阅读 · 0 评论 -
Randomized Select算法
Randomized Select算法中位数问题 等价于集合中第 i 个顺序统计量问题(不考虑奇偶性,偶数取下界) 如果用排序复杂度为nlgn Randomized Select算法是一个期望复杂度为线性的算法 每次以快排的枢纽划分数组 [ begin....k...end ] 如果target<k,则在[ begin....k-1 ]递归查找package com...原创 2019-09-22 23:14:21 · 1392 阅读 · 1 评论 -
【LeetCode题解】43. 字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。num1 和num2 只包含...原创 2019-09-21 16:28:57 · 158 阅读 · 0 评论 -
【LeetCode题解】19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?题解:双指针法:left + n = right 当right....原创 2019-09-11 15:36:05 · 132 阅读 · 0 评论 -
【LeetCode题解】3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"w...原创 2019-09-11 20:58:38 · 120 阅读 · 0 评论 -
【LeetCode题解】5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"题解:共有两种情况的回文:"aba" "cc" 前一种为:递推表达式为 A[i][j] = A[i+1][j-1] + (s[i]==s[j]),单...原创 2019-09-11 22:59:52 · 78 阅读 · 0 评论 -
【LeetCode题解】23. 合并K个排序链表
合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6题解:version -1:分治参照希尔排序的思想,将K个链表两两归并,可以使用递归 这里使用迭代:双指针l...原创 2019-09-12 10:09:38 · 124 阅读 · 0 评论 -
【LeetCode题解】25. K 个一组翻转链表
给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->...原创 2019-09-12 10:38:47 · 91 阅读 · 0 评论