LeetCode题解
早睡身体好_
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 35. 复杂链表的复制
题目描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]].原创 2022-01-10 11:28:40 · 131 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000 链表的逆序输出,但是不用对链表本身进行倒置,所以就简单地读出所有元素然后逆序返回即可,也就是栈的思想,也可以用Python中列表的倒序写法,代码如下:class Solution(object): def reversePrint(self, head...原创 2021-12-14 10:47:44 · 827 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); ...原创 2021-12-13 17:15:30 · 942 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","delet...原创 2021-12-13 10:28:12 · 265 阅读 · 0 评论 -
LeetCode_169
题目:给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。解析:本题中定义的众数为出现次数大于⌊ n/2 ⌋的元素,而且一定存在。那么解题思路是在数组中不断找一对不相等的数,然后删去,最后剩下的数一定是众数。代码如下:public int majorityElement(int[...原创 2018-08-04 10:25:33 · 305 阅读 · 0 评论 -
LeetCode_695
题目:给定一个包含了一些 0 和 1的非空二维数组grid, 一个岛屿是由四个方向 (水平或垂直) 的1(代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0],...原创 2018-08-04 17:36:51 · 404 阅读 · 0 评论 -
LeetCode_119
题目:给定一个非负索引k,其中k≤33,返回杨辉三角的第k行。题目要求O(K)空间复杂度,即只开一个大小为k的数组。解析:题目要求只能开一个数组,则只能利用滚动的思想,每一行与上一行有关。在杨辉三角中,每个数是它左上方和右上方的数的和:将三角转化为数组的话(空位补0):1 0 01 1 01 2 1每个数就是它上一行正上方和左上方的数的和。设置...原创 2018-08-05 11:09:26 · 436 阅读 · 0 评论 -
leetcode_888
题目:给定两个句子A和B。(句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。返回所有不常用单词的列表。您可以按任何顺序返回列表。示例 1:输入:A = "this apple is sweet", B = "this apple is sour"输出:["swe...原创 2018-08-16 21:52:11 · 458 阅读 · 0 评论 -
LeetCode_342
题目:给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4的幂次方。本题有题目限制,不能用递归和循环。解析:判断一个数是不是4的幂次方,最笨的办法是不断让它除以4,再进行判断,但这种方法要递归或者循环,不符合题意。那么就要用到位运算。4的幂次方有1,4,16,64,256。他们的二进制分别是1,100,10000,1000000,100000000,即一个1后面...原创 2018-09-01 14:22:26 · 536 阅读 · 0 评论 -
LeetCode_59
LeetCode_59 螺旋矩阵给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]] 本题类似于打印图案一类的题,关键在于找到二维数组下标i和j的变化规律: 以n=3为例,将矩阵从1填到9,...原创 2018-10-10 09:47:31 · 675 阅读 · 0 评论 -
LeetCode_762
题目:给定两个整数L和R,找到闭区间[L, R]范围内,计算置位位数为质数的整数个数。(注意,计算置位代表二进制表示中1的个数。例如21的二进制表示10101有 3 个计算置位。还有,1 不是质数。)示例 1:输入: L = 6, R = 10输出: 4解释:6 -> 110 (2 个计算置位,2 是质数)7 -> 111 (3 个计算置位...原创 2018-08-03 17:28:06 · 524 阅读 · 0 评论 -
LeetCode_476
问题:给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。注意:给定的整数保证在32位带符号整数的范围内。 你可以假定二进制数不包含前导零位。解析:本题是将一个数的二进制按位取反,输出它的十进制。如5的二进制是101,按位取反为010,输出010的十进制2。最笨的办法是将数的二进制都取出,挨个取反,再加起来。代码如下: public int findComp...原创 2018-07-16 17:00:45 · 326 阅读 · 0 评论 -
LeetCode_804
问题:国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串,比如:"a"对应".-","b"对应"-...","c"对应"-.-.", 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",...原创 2018-07-16 12:55:58 · 419 阅读 · 0 评论 -
LeetCode_852
问题:我们把符合下列属性的数组A称作山脉:A.length >= 3 存在0 < i< A.length - 1使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]给定一个确定为山脉的数组,返回任何满足A[0] < A[1] &l...原创 2018-07-15 13:01:55 · 386 阅读 · 0 评论 -
LeetCode_771
问题:给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。解析: 本题是简单的搜索,最容易想到的是暴力求解,将S中每个字母和J中的做比较:public int num...原创 2018-07-14 11:22:45 · 402 阅读 · 0 评论 -
LeetCode_13
题目:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并...原创 2018-07-14 10:57:01 · 317 阅读 · 0 评论 -
LeetCode合并两个有序链表及合并两个有序数组
问题描述: 本题思路是将两个链表上的值进行比较,按顺序取下,插在总链表上,当某一条链表上的值取完之后,将另一条链表剩下的所有值插到到总链表的后面。 先初始化两个指针p和head,p用来将两个链表中的值插入到总链表上,head用来作为总链表的头结点返回。struct ListNode* head; struct ListNode* p=head; ...原创 2018-05-05 13:14:24 · 507 阅读 · 0 评论 -
LeetCode两数之和o(n)算法(java语言)
问题描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例:给定nums={2,7,11,15},target=9。因为nums[0]=2,nums[1]=7,2+7=9,所以返回[0,1]。---------------------------------------------...原创 2018-05-04 18:54:46 · 594 阅读 · 0 评论 -
LeetCode_78(回溯)
给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]这道题有两种做法,一种是二进制法,另一种是回溯法。二进制法比较好理解,这道题求...原创 2018-10-15 21:23:56 · 563 阅读 · 0 评论 -
LeetCode_797(回溯)
给一个有n个结点的有向无环图,找到所有从0到n-1的路径并输出(不要求按顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。示例:输入: [[1,2], [3], [3], []] 输出: [[0,1,3],[0,2,3]] 解释: 图是这样的:0---...原创 2018-10-15 21:25:34 · 1475 阅读 · 0 评论 -
LeetCode_310最小高度树(拓扑排序)
题目链接:https://leetcode-cn.com/problems/minimum-height-trees/description/题目大意: 把一个无向图想象成一棵树,每个结点都可以是树的根节点,然后找到最小的树的高度所对应的根结点。思路解法: 开始把这个题想得有点简单,我用dfs计算出了每个点作为根节点时的树的高度,然后用当前最小高度...原创 2018-12-07 22:47:58 · 855 阅读 · 0 评论 -
LeetCode_802找到最终的安全状态(dfs)
题目链接:https://leetcode-cn.com/problems/find-eventual-safe-states/description/ 本题大意就是找出所有不与环连通的结点。不安全状态有两种情况:1、这个点在一个环中。2、这个点顺着边递推,会走到一个环里。所以本题的思路是给点设置三种状态,初始时的0表示未访问过的点;1表示这个点是不安全的,即这个点连接着一个环或...原创 2018-12-06 23:14:41 · 524 阅读 · 0 评论 -
LeetCode_399除法求值(弗洛伊德算法)
题目链接:https://leetcode-cn.com/problems/evaluate-division/description/ 本题要解的是多源最短路径问题,所以用弗洛伊德算法比较合适。 弗洛伊德是个三层循环,对每一个节点对做松弛操作,但在本题中,松弛操作较为不同。本题的松弛操作要用到一个简单的数学式子:a/b=(a/c)*(c/b)。最短路径中的松弛...原创 2018-12-06 22:27:52 · 868 阅读 · 0 评论 -
LeetCode_207课程表(拓扑排序)
题目链接:https://leetcode-cn.com/problems/course-schedule/description/拓扑排序详解:https://blog.csdn.net/Q_M_X_D_D_/article/details/84862081 本题大意是给一个图,判断图中是否有环路。用bfs的思想来进行拓扑排序。基本思路是统计图中所有点的出度,然后动态维护一...原创 2018-12-06 17:39:04 · 649 阅读 · 0 评论 -
LeetCode_43字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。 num1和num...原创 2018-11-29 22:32:17 · 275 阅读 · 0 评论 -
LeetCode_318 最大单词长度乘积
给定一个字符串数组words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例1:输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16 解释: 这两个单词为 "abcw", "xtfn"。...原创 2018-11-28 23:02:53 · 450 阅读 · 0 评论 -
LeetCode_347前K个高频元素
给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的k总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(nlogn) ,n是...原创 2018-11-28 22:43:27 · 275 阅读 · 0 评论 -
LeetCode_49字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。 不考虑答案输出的顺序。 比...原创 2018-11-20 22:13:09 · 284 阅读 · 0 评论 -
LeetCode893特殊等价字符串组
你将得到一个字符串数组A。如果经过任意次数的移动,S == T,那么两个字符串S和T是特殊等价的。一次移动包括选择两个索引i和j,且i%2 == j%2,并且交换S[j]和S [i]。现在规定,A中的特殊等价字符串组是A的非空子集S,这样不在S中的任何字符串与S中的任何字符串都不是特殊等价的。返回A中特殊等价字符串组的数量。...原创 2018-11-19 11:09:06 · 464 阅读 · 0 评论 -
LeetCode_62(动态规划)
一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m和n的值均不超过 100。示例1:输入: m = 3, n = 2输出: 3解释:...原创 2018-10-19 22:35:41 · 340 阅读 · 0 评论 -
LeetCode_120(动态规划)
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。说明:如果你可以只使用O(n)的额外空间(n为三角形的总行数)来解决这个问题,那么你的算法会很加分。...原创 2018-10-19 22:20:15 · 331 阅读 · 0 评论 -
LeetCode_638(动态规划)
在LeetCode商店中, 有许多在售的物品。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单。请输出确切完成待购清单的最低花费。每个大礼包的由一个数组中的一组数据描述,最后一个数字代表大礼包的价格,其他数字分别表示内含的其他种类物品的数量。任意大礼包可无限次购买。示例 1:输入: [2,5],...原创 2018-10-19 21:44:01 · 1073 阅读 · 0 评论 -
LeetCode_39(回溯)
给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。 解集不能包含重复的组合。示例1:输入: candidates = [2,3,6,7], target = 7,所求解集为...原创 2018-10-15 22:02:18 · 388 阅读 · 0 评论 -
LeetCode_216(回溯)
找出所有相加之和为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]] 本题...原创 2018-10-15 21:40:04 · 526 阅读 · 0 评论 -
LeetCode_22(回溯)
给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n=3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]本题中的有效地括号组合一定是先出现左括号再出现右括号,并且是成对出现的,那么我们使用递归,如果当前还有左括号,就递归,并且用掉一个左括号...原创 2018-10-15 21:28:58 · 451 阅读 · 0 评论 -
LeetCode_77(回溯)
给定两个整数n和k,返回 1 ...n中所有可能的k个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]这道题与子集那道题比较类似,不同的是,这道题中,当找到一条新路径时,需要判断这条路径的长度是否等于k,来决定要不要将其存入结果列表中。我们需要一个...原创 2018-10-15 21:28:04 · 326 阅读 · 0 评论 -
LeetCode_46(回溯)
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]从网上偷师的方法:以{1,2,3,4,5}为例,先看4 5两个数,全排列为45和54,即以4开头5的全排列和以5开头4的全排列。...原创 2018-10-15 21:27:03 · 350 阅读 · 0 评论 -
LeetCode_719找出第k小的距离对
给定一个整数数组,返回所有数对之间的第 k 个最小距离。一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值。示例 1:输入:nums = [1,3,1]k = 1输出:0 解释:所有数对如下:(1,3) -> 2(1,1) -> 0(3,1) -> 2因此第 1 个最小距离的数对是 (1,1),它们之间的距离为 0。提示:2 &l...原创 2019-04-16 22:49:55 · 552 阅读 · 0 评论