![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题之路
Devin Dever
立志写好每一篇博客,分享日常好用工具!
展开
-
剑指leetcode—面试题 04.03. 特定深度节点链表
题目描述:给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D个链表)。返回一个包含所有深度的链表的数组。方法一层序遍历法...原创 2020-09-11 11:34:05 · 115 阅读 · 0 评论 -
剑指leetcode—平衡二叉树
题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。解法一自顶向下遍历检查/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x.原创 2020-09-11 10:57:10 · 158 阅读 · 0 评论 -
剑指leetcode—N叉树的前序遍历
题目描述:给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个 3叉树 :树的遍历有着四种遍历方式先序遍历后序遍历中序遍历层次遍历这里的要求是使用先序遍历,同时要求使用迭代法,递归法的思想很简单递归法给出递归法的算法思想void preorder(node * b){ if(b!=null) { printf("%d",b->data); preorder(b->lchild); preorder(b->rchile); }} .原创 2020-09-01 16:24:07 · 145 阅读 · 0 评论 -
剑指leetcode—相同的树
题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。这道题目很简单可以使用递归,迭代方法一:递归法对于两个树中的相同位置的节点p和q,需要进行这样的比较如果pnull而且qnull,那么这两棵树在此处位置是一样的,返回true如果p==null或者q=null,那么不一样,返回false如果p!=null而且q!=null,p.val==q.val,返回isSameTree(p.left,q.left)&.原创 2020-06-13 11:57:06 · 98 阅读 · 0 评论 -
剑指leetcode—删除排序数组中的重复项||
题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,1,2,3,3],函数应返回新长度 .原创 2020-06-13 11:17:17 · 168 阅读 · 0 评论 -
剑指leetcode—搜索二维矩阵
题目描述:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true示例 2:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34,.原创 2020-06-11 12:05:49 · 113 阅读 · 0 评论 -
剑指leetcode—颜色分类
题目描述:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能想出一个仅使用常数.原创 2020-06-11 11:30:11 · 160 阅读 · 0 评论 -
剑指leetcode—矩阵置零
题目描述: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]进阶:一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是.原创 2020-06-11 10:22:54 · 234 阅读 · 0 评论 -
剑指leetcode—经典动态规划问题爬楼梯
解法目录递归法,模拟爬楼梯的这个过程,也就是暴力法记忆化递归简单动态规划斐波那契数题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶来源:力扣(L原创 2020-06-11 09:27:13 · 199 阅读 · 0 评论 -
剑指leetcode—x的平方根
题目描述:实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sqrtx著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。.原创 2020-06-10 16:37:59 · 163 阅读 · 0 评论 -
剑指leetcode—最小路径和
题目描述:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法一.原创 2020-06-10 14:13:15 · 178 阅读 · 0 评论 -
递归,动态规划法解决不同路径||
题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0,1,0],[0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。从左上角.原创 2020-06-10 12:30:33 · 331 阅读 · 0 评论 -
递归,动态规划,排列组合解决不同路径|
题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”), 问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向.原创 2020-06-10 11:25:47 · 607 阅读 · 0 评论 -
剑指leetcode—旋转链表
题目描述:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2.原创 2020-06-10 10:09:38 · 159 阅读 · 0 评论 -
剑指leetcode—合并区间
题目描述:给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/mer.原创 2020-06-08 15:34:47 · 196 阅读 · 0 评论 -
剑指leetcode—最长回文子串
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。本文参考于最长回文子串题解.原创 2020-06-06 22:50:15 · 147 阅读 · 0 评论 -
剑指leetcode—n皇后问题|和n皇后问题||
class Solution { List<List<String>> res; public List<List<String>> solveNQueens(int n) { if(n<=0) return null; res=new LinkedList<>(); char [] [] board=new char [n][n]; for(char [] chars:board) Arrays.fill(cha原创 2020-06-06 18:09:22 · 190 阅读 · 0 评论 -
剑指leetcode—只出现一次的数字||
题目描述; 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例 2:输入: [0,1,0,1,0,1,99]输出: 99来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number-ii著作权归领扣网络所有。商业转载请联系官方授权,非商.原创 2020-06-06 12:39:05 · 134 阅读 · 0 评论 -
剑指leetcode—二进制求和
题目描述: 给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1” 输出: “100”示例 2:输入: a = “1010”, b = “1011” 输出: “10101”提示:每个字符串仅由字符 '0' 或 '1' 组成。1 <= a.length, b.length <= 10^4字符串如果不是 "0" ,就都不含前导零。来源:力扣(LeetCode)链接:http.原创 2020-06-06 12:25:48 · 131 阅读 · 0 评论 -
剑指leetcode—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 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。来源:力扣(LeetCode)链接.原创 2020-06-04 15:13:17 · 125 阅读 · 0 评论 -
剑指leetcode—为运算表达式设计优先级
题目描述:给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: “2-1-1”输出: [0, 2]解释:((2-1)-1) = 0(2-(1-1)) = 2示例 2:输入: “23-45”输出: [-34, -14, -10, -10, 10]解释:(2*(3-(45))) = -34((23)-(45)) = -14((2(3-4))5) = -10(.原创 2020-06-04 11:24:40 · 144 阅读 · 0 评论 -
剑指leetcode—最小K个数
题目描述:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。 示例:输入: arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]提示:0 <= len(arr) <= 1000000 <= k <= min(100000, len(arr))来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/smallest-k-lcci著作权归领扣网络所有。商业转载请联系官方授权.原创 2020-06-04 10:18:24 · 180 阅读 · 0 评论 -
剑指leetcode—最接近原点的K个数
题目描述:我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例 1:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]解释:(1, 3) 和原点之间的距离为 sqrt(10),(-2, 2) 和原点之间的距离为 sqrt(8),由于 sqrt(8) < sqrt(10),(-2,.原创 2020-06-03 12:23:19 · 244 阅读 · 0 评论 -
分治法,动态规划法—最大子数组问题的求解
问题描述:假定你获得了投资某公司的机会,这家公司的股票价格是不稳定的,你被准许在某一天买进该公司的股票#define min -24551215#include<stdio.h>struct tuple{ int low; int high; int maxsum;};tuple findmaxcrossingsubarray(int a[100],int low,int mid,int high){ int leftsum=min; int maxleft; int r原创 2020-05-26 22:02:42 · 750 阅读 · 0 评论 -
剑指leetcode—两两交换链表的节点
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例一给定 1->2->3->4, 你应该返回 2->1->4->3.示例二给定 1->2->5->3->4,返回2->1->3->5->4题目中要求是两两交换相邻的节点,每一次交换的操作都是一样的,所以我们可以想到递归,不断的调用自身函数方法一:递归算法流程从链表的头结.原创 2020-06-02 11:54:55 · 187 阅读 · 0 评论 -
剑指leetcode—字母异位词分组
题目描述:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。分组问题,所以需要设定分组的依据方法一:排序数组分类,维护一个映射哈希表 ans :{String ->List},每个键K都是一个排序了.原创 2020-06-02 10:41:51 · 149 阅读 · 0 评论 -
剑指leetcode—旋转图像
题目描述:给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],.原创 2020-06-02 10:08:43 · 105 阅读 · 0 评论 -
剑指leetcode—数组中的第K个最大元素
题目描述:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4方法一:先排序在返回数组中的第k个数。可以利用冒泡,选择,插入,,,基础排序算法,但是时间效率较低,最好的办法是利用C语言中的快速排序库函数,qsort函数,c++,java中都有类似的库函数。就不赘述.原创 2020-06-01 15:38:31 · 164 阅读 · 0 评论 -
剑指leetcode—(待更新)全排列||
题目描述: 给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]根据题目意思,序列中包含重复数字,但是返回所有不重复的全排列。由于今天有其他事情需要做,就不总结了可以参考大佬写的回溯加剪枝java语言实现class Solution { List<List<Integer>> res = new LinkedList<>();/* 主函数,输入一组不.原创 2020-06-01 14:49:37 · 115 阅读 · 0 评论 -
剑指leetcode— (待更新)回溯法全排列
题目描述:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]解法一:回溯法原创 2020-06-01 13:04:58 · 116 阅读 · 0 评论 -
剑指leetcode—字符串相乘
题目描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型(.原创 2020-05-31 21:47:26 · 236 阅读 · 0 评论 -
剑指leetcode—字符串相加
题目描述:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。算法分析:设置i,j指针分别指向num1,num2的末尾元素,模拟加法首先是计算是否有进位,count=tmp/10,表示进几位。添加当前为,计算tmp=a+b+count;.并将此时.原创 2020-05-31 17:46:03 · 165 阅读 · 0 评论 -
剑指leetcode—组合数总数||
题目描述:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]示例 2:输入: ca.原创 2020-05-31 10:02:19 · 236 阅读 · 0 评论 -
剑指leetcode—组合总数
题目描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为target 的组合。candidates 中的数字可以无限制重复被选取说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入: candidates = [2,3,5], target.原创 2020-05-31 09:17:44 · 163 阅读 · 0 评论 -
剑指leetcode—外观数列
题目描述:「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:111,(1 被读作 "one 1" ("一个一") , 即 11。)211211,(21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。)111221给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。注意:整数序列中的每一项将表示为一个字符串。示例 1:输入: 1输出: “1.原创 2020-05-30 13:29:58 · 289 阅读 · 0 评论 -
剑指leetcode—有效的数独
题目描述:判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。输入:[[“5”,“3”,".",".",“7”,".",".",".","."],[“6”,".",".",“1”,“9”,“5”,".",".","."],[".",“9”,“8”,".",".",".原创 2020-05-30 12:17:39 · 169 阅读 · 0 评论 -
剑指leetcode—数组中出现次数超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000这道题目有多种解法方法一:哈希表统计法建立哈希表统计nums中数字的数量,对应的数字为键,键值为数字的数量。当某一个数字的键值超过数组的一半长度时,该数字就是众数。class Solution{ public in.原创 2020-05-30 09:39:38 · 216 阅读 · 0 评论 -
剑指leetcode—搜索插入位置
题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0方法一:二分查找加分析法毫无疑问,与查找有关的算法比较优的解法就是二分查找法算法流程首先定义两个指针l.原创 2020-05-29 15:28:59 · 100 阅读 · 0 评论 -
剑指leetcode—在排序数组中查找元素的第一个和最后一个位置
题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]方法一:线性扫描法首先,我们对 nums 数组从左到右做.原创 2020-05-29 14:34:20 · 171 阅读 · 0 评论 -
剑指leetcode—搜索旋转排序数组
题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], ta.原创 2020-05-29 10:58:19 · 142 阅读 · 0 评论