
LeetCode
文章平均质量分 72
程序胖
这个作者很懒,什么都没留下…
展开
-
LeetCode题目:11. 盛最多水的容器
题目解析这道题就是给你个一维数组,然后数组的索引表示位置,数组的值表示高,然后根据 尾索引 - 首索引 得到底,然后 底 * 高 得到水的面积,然后求这组数据中最大的值知道具体题意之后,这题怎么解呢?首先一个最简单的方法,就是暴力解法,把所有的结果求出来,两个for循环,从第一索引开始,第一遍先遍历全部数组的值,求出最大值,第二遍从第二个索引开始遍历,一次类推,这样就能得到一个最大的值。上面的方法太简单了,所以就不做代码展示了,主要是要讲解下面一个方法,双指针法。这道题我一看就知道是双指针,原创 2022-03-02 18:42:12 · 194 阅读 · 0 评论 -
LeetCode题目:34. 在排序数组中查找元素的第一个和最后一个位置
题目题目解析首先这是一个很明显的查找问题,查找问题很明显,我们直接用for循环遍历一遍就能找出来,但是这题目有个要求,需要找出这个数字最初的和最后的位置,这样的话,我们需要一个数组来记录字段,这样暴力方法就出来了方法一:暴力解法首先我们需要一个数组,0用来存最初的,1用来存最后的,并且这个数组的初始值为-1然后我们遍历数组如果是我们目标的数字判断数组里0的值是否为-1,如果是则放入0的位置上,如果不是则放入1的位置上如果不是则跳过遍历完之后就把答案上传代码如下clas原创 2022-02-14 11:51:21 · 342 阅读 · 0 评论 -
LeetCode题目:1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
题目题目解析很明显是个前缀和问题,就是你通过一天吃 1 ~ dailyCapi 颗糖果来保证你到第 faouriteDay 天可以吃到 favouriteType 类型的糖果。技巧解析很明显,无论你怎么选,你吃糖果的个数可以是 [ favouriteDay + 1 ,( favouriteDay + 1 ) * dailyCapi ] 这个区间内然后你第 i 类糖果需要吃的糖果数也就是前面 i 类前面所有糖果的数量,所以他的区间就是[ sum(i - 1), sum[ i ] ]然后如果两原创 2021-06-04 09:46:13 · 210 阅读 · 0 评论 -
LeetCode题目:525.连续数组
题目题目解析这个题目意思很明显,就是找出一段连续的子数组,然后让0和1相等,暴力没有试过我用的是前缀和技巧解析第一步,定义一个 ans 用来存放最优解,定义一个 cur 用来存放 0 和 1 是否相等,然后定义一个 map 来存放 cur 和数组下标为啥要定义一个map,这就是精髓所在了,看下面的场景然后开始循环遍历如果是 0 ,cur - 1 ,如果是 1 , cur + 1然后开始判断是否在map中如果在,就现在的下标减去map 中的下标,然后跟 ans 相对比,取原创 2021-06-03 11:04:22 · 169 阅读 · 0 评论 -
LeetCode题目523:连续的子数组和
题目题目解析题目的意思是说一个数组里面的子数组(子数组是指数组里面所有数字组成的集合,连续的子数组就是需要连续的)的和是 k 的倍数,也就是说,找出一段连续的子数组能是 k 的倍数。技巧解析暴力确实可以解决但是会超时,这个时候就需要一些技巧了,这种一般的判断都是 ( a + b ) % k ;但是有个定理就是同余定理,意思就是说,当(a+b+c)% k == (a+b)% k 的时候说明 c 这个数字是 k 的倍数,也就说明,有一个数是 k 的倍数,当有两个的时候,就可以说明有一段连续的子数组是原创 2021-06-02 19:01:40 · 606 阅读 · 0 评论 -
LeetCode题目:剑指 Offer 47. 礼物的最大价值
题目题目链接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/题目解析:在一个矩阵里面,从第一个方块走到最后一个,只能向右或向下,求怎么走才能拿到礼物最大。用dp公式dp[i][j] = max(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j]),判断第 i 行,第 j 个方块中,是上面的方块得到的权重大,还是左边过来的权重大。代码class Solution {原创 2020-07-08 16:06:28 · 155 阅读 · 0 评论 -
LeetCode题目:面试题 17.16. 按摩师
题目题目链接:https://leetcode-cn.com/problems/the-masseuse-lcci/题目解析:题目比较简单,大致意思就是一串数组中,如何接客可以使得接客时长最长,然后相邻的客人不能接。创建办法就是创建两个数组:dp[i][0]表示的是第 i 个客人不接,存储的是第 i 个之前最大的接客时长dp[i][1]表示的是第 i 个客人接,存储的是第 i -1个不接之前最大的接客时长加上第 i 个客人的时长代码class Solution { pub原创 2020-07-08 15:27:23 · 173 阅读 · 0 评论 -
LeetCode题目:134. 加油站
题目题目链接: https://leetcode-cn.com/problems/gas-station/题目解析:问在何处出发时,可以环绕一周。第一种方法:暴力解法(两次循环):直接看代码第二种方法:直接将每段路车最终能剩下的油算出来,如果加起来大于等于0则这段路就可以走的通,如果小于0则走不通解决了走不走得通的问题,那就开始找,从哪里开始走。如果A到不了B,那就从下一个加油站开始,遍历一遍数组找到一个可以走的地点。代码第一种:class Solution { publi原创 2020-06-19 16:29:34 · 232 阅读 · 0 评论 -
LeetCode题目:1414. 和为 K 的最少斐波那契数字数目
题目题目链接:https://leetcode-cn.com/problems/find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k/题目解析:就是利用最少的斐波那契数字去变成K,题目很简单代码class Solution { public int findMinFibonacciNumbers(int k) { //创建数组来存放斐波那契数字 int[] arr = new int[1001];原创 2020-06-19 15:24:09 · 262 阅读 · 0 评论 -
LeetCode题目:1400. 构造 K 个回文字符串
题目题目链接:https://leetcode-cn.com/problems/construct-k-palindrome-strings/题目解析:这题主要是找范围,找给你的字符串最少能拆成几个回文串,最多能拆成几个回文串。最多回文串,就是字符串的大小,每个字母都一个回文串,所以不用求。所以重点还是找最小回文串。那就数每个字母的个数。如果为偶数,他套哪个回文串都可以,但是为奇数就不行,所以我们主要就是找奇数个的字母。然后看要求划分k个字符串的k在不在最大最小范围之内。比如:“leetcode原创 2020-06-18 17:51:08 · 295 阅读 · 0 评论 -
LeetCode题目:1094. 拼车
题目题目链接:https://leetcode-cn.com/problems/car-pooling/题目解析:题目比较好理解,给一个二维数组,每一个数组里面放着三个数据,上车人数,上车地点,下车地点,此外路线是一条直线。我一开始准备用暴力,但是发现越写越复杂就违背了贪心的思想。所以我还是去后面看看别人的思路,理解了一个思路。将路程变成一个数组,然后将上车地点作为数组的索引,然后数组里面存放的是车上减少或者增加的座位。遍历完数组之后,开始遍历路程数组,然后中间有座位过多的化就返回false代码原创 2020-06-17 20:36:43 · 476 阅读 · 0 评论 -
LeetCode题目:1433. 检查一个字符串是否可以打破另一个字符串
题目题目连接:https://leetcode-cn.com/problems/check-if-a-string-can-break-another-string/题目解析:给两个字母集合,找出使得两个字母集合按照顺序都有一个集合的字母始终比另一个字母大的顺序。就比如{a,b,c}<{a,x,y},因为a跟a一样大,x比b大,y比c大,所以可以打破题目方法:第一种是我的方法,直接暴力解法,实在是慢的不行将两个字符串按照字母排序然后两个字符串一一比对如果中间的一对字母比较跟前两个不一原创 2020-06-17 15:52:09 · 243 阅读 · 0 评论 -
LeetCode题目:1338. 数组大小减半
题目题目链接:https://leetcode-cn.com/problems/reduce-array-size-to-the-half/题目解析:其实题目还是很简单的,就是将数组中相同的数字当作一个个集合,问删除多少这样的集合可以使得数组的长度变成一半。1. 先将数组中对应数字的数量计算出来2. 然后排序,由大到小3. 判断加多少个相加的时候会大于数组长度的一般代码import java.util.Map;import java.util.Map.Entry;class Soluti原创 2020-06-15 16:21:01 · 249 阅读 · 0 评论 -
LeetCode题目:406. 根据身高重建队列
题目题目链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height/题目解析:首先要先了解,这可以将people[0]比作身高值,如果高的人是看不到比自己矮的的人的,所以高的只会看到比自己高的或者跟自己一样高的。根据这个想法就可以先将二维数组排序排完序之后,可以利用LinkedList集合,利用add(index,Element)这个方法,如果索引相同的情况下,后来的会在先来的前面。所以我们把排好序的数组放入集合,然后再一一原创 2020-06-13 19:52:30 · 214 阅读 · 0 评论 -
LeetCode题目:714. 买卖股票的最佳时机含手续费
题目题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/题目解析:主要是维护今天的股票买的利润m和今天的股票不买的利润n这两个变量首先先将两个变量初始化,n = 0 ,m = -price[0];然后从后一天开始遍历先判断,如果今天将股票卖出去的利润会不会比之前的利润高然后判断,如果买今天的股票不然买之前的股票会不会更划算代码class Soluti原创 2020-06-11 21:12:53 · 201 阅读 · 0 评论 -
LeetCode题目:763. 划分字母区间
题目题目链接:https://leetcode-cn.com/problems/partition-labels/题目解析:通过数组将每个字母最后一个索引保存起来,根据贪心的想法,将第一个字母最后索引作为标志,如果中间有字母的最后索引大于它,就替换,然后如果遍历到字母的最后索引都没有比它更大的话,这一段就算是字母段,接着继续遍历,知道字符串结束代码class Solution { public List<Integer> partitionLabels(String S) {原创 2020-06-10 21:25:04 · 195 阅读 · 0 评论 -
LeetCode题目:1282. 用户分组
题目题目链接:https://leetcode-cn.com/problems/group-the-people-given-the-group-size-they-belong-to/题目解析:创建map集合,用于存放分组的list集合循环开始,当分组的索引在map集合中如果没有,就创建一个放进去如果在map集合有,则将当前的值放入map对应的索引的list集合中代码class Solution { public List<List<Integer>> g原创 2020-06-08 15:45:21 · 177 阅读 · 0 评论 -
LeetCode题目:106. 从中序与后序遍历序列构造二叉树
题目题目链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/题目解析:利用中序和后序遍历构造二叉树,用暴力解法中序遍历为:左根右后序遍历为:左右根后序遍历的最后一个值都是根根据后序遍历找到的根可以在中序遍历的数组中寻找到左子树的范围和右子树的范围依次递归则可以构造这棵树代码/** * Definition for a binary tree no原创 2020-05-23 11:51:00 · 223 阅读 · 0 评论 -
LeetCode题目:1448. 统计二叉树中好节点的数目
题目题目链接:https://leetcode-cn.com/problems/count-good-nodes-in-binary-tree/题目解析:使用DFS搜索,带着之前最大的值搜索遍历二叉树。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {原创 2020-05-21 16:30:46 · 270 阅读 · 0 评论 -
LeetCode题目:230. 二叉搜索树中第K小的元素
题目题目链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/题目解析:通过遍历整棵二叉搜索树(二叉搜索树特点,左子树一定比根节点小,右子树一定比根节点大),将结点的值按从小到大放入ArrayList集合中,在找到k-1的值就是第k个最小的值代码/** * Definition for a binary tree node. * public class TreeNode { * int val; *原创 2020-05-20 15:42:17 · 112 阅读 · 0 评论 -
LeetCode题目:1261. 在受污染的二叉树中查找元素
题目题目连接:https://leetcode-cn.com/problems/find-elements-in-a-contaminated-binary-tree/题目大意:题目比较简单,看着下面的代码应该可以理解代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tree原创 2020-05-20 15:29:25 · 193 阅读 · 0 评论 -
LeetCode题目:面试题 04.10. 检查子树
题目题目链接:https://leetcode-cn.com/problems/check-subtree-lcci/题目大意:就是判断t2是否为t1的子树,通过递归判断即可代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;原创 2020-05-20 15:07:06 · 159 阅读 · 0 评论 -
LeetCode题目:1008. 先序遍历构造二叉树
题目题目链接:https://leetcode-cn.com/problems/construct-binary-search-tree-from-preorder-traversal/题目解析:使用递归法代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNod原创 2020-05-19 21:35:32 · 136 阅读 · 1 评论 -
LeetCode题目:1305. 两棵二叉搜索树中的所有元素
题目题目链接:https://leetcode-cn.com/problems/all-elements-in-two-binary-search-trees/题目解析:这题非常简单,直接通过递归收集数字,然后利用Collections集合的sort方法排序即可。复杂度分析:时间复杂度:O(nlogn)因为用到了排序。空间复杂度:O(n)开辟了一个m+n(跟n同量级)大小的list,m代表tree1的节点数、nn代表tree2的节点数。代码/** * Definition for a bin原创 2020-05-09 21:19:39 · 114 阅读 · 0 评论 -
LeetCode题目:701. 二叉搜索树中的插入操作
题目题目链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/题目解析:二叉搜索树的概念:对于树中的每一个结点,他的左子树都要比他这个结点要小,对于他的右子树的结点都要比他要大。所以对一个二叉树进行中序遍历,如果是单调递增的,则可以说明这个树是二叉搜索树。所以题目很简单就可以解决,判断,如果比结点大就往右走...原创 2020-04-22 20:57:33 · 245 阅读 · 0 评论 -
LeetCode题目:1315. 祖父节点值为偶数的节点和
题目题目链接:https://leetcode-cn.com/problems/sum-of-nodes-with-even-valued-grandparent/题目解析:暴力遍历:如果遇到结点是偶数就搜索他的子节点的子节点,并加起来代码:/** * Definition for a binary tree node. * public class TreeNode { ...原创 2020-04-21 22:35:20 · 187 阅读 · 0 评论 -
LeetCode题目:654. 最大二叉树
题目题目链接:https://leetcode-cn.com/problems/maximum-binary-tree/方法递归:将nums数组,l 是左边的边界,r 是右边的边界进行递归如果l 跟 r 相等说明指向同一个数就返回null如果不是,就找出他们这个区间内最大的数将这个值根据树创建结点将这个数左边的边界递归,找出他的左子树将这个数右边的边界递归,找出他的右子树最后返...原创 2020-04-21 21:29:50 · 138 阅读 · 0 评论 -
LeetCode题目:1302. 层数最深叶子节点的和
题目题目链接:https://leetcode-cn.com/problems/deepest-leaves-sum/题目解析:就是寻找二叉树的最底层结点,并且把最底层结点相加起来直接看代码好理解代码/** * Definition for a binary tree node. * public class TreeNode { * 结点值 * int val; *...原创 2020-04-20 11:41:06 · 231 阅读 · 0 评论 -
LeetCode题目:89. 格雷编码
题目题目链接:https://leetcode-cn.com/problems/gray-code/题目解析:因为是格雷编码所以是这样的变换的代码class Solution { public List<Integer> grayCode(int n) { List<Integer> res = new ArrayList<Int...原创 2020-04-17 12:00:47 · 155 阅读 · 0 评论 -
LeetCode题目:面试题 08.08. 有重复字符串的排列组合
题目题目链接:https://leetcode-cn.com/problems/permutation-ii-lcci/题目解析:使用SET集合去重代码class Solution { //创建SET集合去除重复的字符串 Set<String> set = new HashSet<>(); public String[] permutation(St...原创 2020-04-15 15:20:58 · 338 阅读 · 0 评论 -
LeetCode题目:216. 组合总和 III
题目题目链接:https://leetcode-cn.com/problems/combination-sum-iii/题目解析:https://blog.youkuaiyun.com/qq_41816516/article/details/105506706主要回溯思想跟上面讲的差不多只不过时判断条件更改了代码class Solution { //将答案和k,n拿出来会更加方便递归不用每次都传...原创 2020-04-14 11:11:45 · 150 阅读 · 0 评论 -
LeetCode题目:77. 组合
题目题目链接:https://leetcode-cn.com/problems/combinations/题目解析:根据题目给的1234 k=4来解释,当你递归遍历时判断集合的大小是否跟 k 值相等,如果相等就加入大集合。for循环遍历 j 等于传入的 i 值 然后 j < n+11. 给一个linkedlist集合中加入j2. 然后继续递归但是 j 要加上 1 ,变成后...原创 2020-04-14 10:45:40 · 139 阅读 · 0 评论 -
LeetCode题目:面试题 08.07. 无重复字符串的排列组合
题目题目链接:https://leetcode-cn.com/problems/permutation-i-lcci/题目解析:主要是用回溯方法递归调用,拿adc举例。用递归将切割下来的字符串和已经添加的字符串,继续操作。代码class Solution { //创建list集合,用来存放答案 List<String> list=new ArrayList<...原创 2020-04-12 11:49:05 · 318 阅读 · 0 评论 -
LeetCode题目:1023. 驼峰式匹配
题目题目链接:https://leetcode-cn.com/problems/camelcase-matching/题目解析:用正则表达式然后遍历得到答案代码import java.util.regex.Pattern;class Solution { public List<Boolean> camelMatch(String[] queries, String ...原创 2020-04-11 15:27:39 · 191 阅读 · 0 评论 -
LeetCode题目:17. 电话号码的字母组合
题目题目链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/题目解析:这道题如果用循环的话,我发现要好多层,如果用递归的话就好很多。但是递归我不太熟,所以只能大概说一下思路。题目大意很简单,就是根据给的数字组成不同组合的字符串就拿“23”来举例就是这样递归,看代码比较清楚一点代码cl...原创 2020-04-10 21:22:28 · 145 阅读 · 0 评论 -
LeetCode题目:1268. 搜索推荐系统
题目题目链接:https://leetcode-cn.com/problems/search-suggestions-system/题目解析:给你一个搜索字符串数组,再给你一个搜索字符串,搜索字符串从第一个字符,前两个字符,前三个字符,依次组成的字符串去搜索字符串数组中相同的字符串,并按照字典顺序输出前三个字符串。用Collection集合的sort方法将字符串数组按照字典排序排列好搜...原创 2020-04-10 11:51:53 · 335 阅读 · 0 评论 -
LeetCode题目:面试题 05.02. 二进制数转字符串
题目题目链接:https://leetcode-cn.com/problems/bianry-number-to-string-lcci/题目解析:就让你double类型的小数转换成二进制,小数转换成二进制的机制就是乘二然后再剪掉1,剩下的接着乘2直到乘到0结束,如果乘完2有1就添加1,如果没有就添加0。唯一一次内存和用时都超过100%代码class Solution { pu...原创 2020-04-08 20:28:19 · 164 阅读 · 0 评论 -
LeetCode题目:1003. 检查替换后的词是否有效
题目题目链接:https://leetcode-cn.com/problems/check-if-word-is-valid-after-substitutions/题目大意:就是一个字符串无论怎么插,最后拆开都可以还原成字符串“abc”第一个方法最简单就是利用String里面的replace方法将字符串“abc”转换成“”最后再判断字符串是否为空。第二个方法就是利用栈,将字符串分解成字符...原创 2020-04-07 16:07:11 · 239 阅读 · 0 评论 -
LeetCode题目:1324. 竖直打印单词
题目题目链接:https://leetcode-cn.com/problems/print-words-vertically/这题目很好理解就直接上代码了代码class Solution { public List<String> printVertically(String s) { //创建list集合来存放答案 List<Strin...原创 2020-04-06 21:08:18 · 1306 阅读 · 0 评论 -
LeetCode题目:12. 整数转罗马数字
题目题目链接:https://leetcode-cn.com/problems/integer-to-roman/题目解析:我的方法就是暴力,将千,百,十,个位一个一个切分开,然后再根据特性一个个写成字符串然后再拼接在一起。还有一种方法,就是将数值和字符分别放在两个数组中,用数去减每一个数组中的数值,然后相对应的就加上每一个数组对应的字符串方法的链接:https://leetcode-cn...原创 2020-04-05 21:12:16 · 216 阅读 · 0 评论