力扣
文章平均质量分 50
力扣刷题题解
健康&自由
就是我干的,那又怎么样
展开
-
力扣2861 补9.21
先要确定这个值的取值范围,最小值为0不用说,最大值的话,假设,创建合金需要1 份 j 类型金属。看了灵神题解,嗯,就好家伙,所有合金都需要由同一台机器制造。题目老是看漏,也就是只能选择其中一个机器造合金,这题能用二分也是我死都想不到的,因为问题中存在单调性。这题基本上二分的参数都要用long,要不然就有用例不过,一开始我是全用int的,对数据观察这方面没啥概念。有单调性问题,二分,当然我自己好久没写二分都忘了基本操作了,勉勉强强凑出来二分代码实现。然后代码实现,一下就是我写的垃圾二分(自己写的,不标准)。原创 2023-09-25 22:35:07 · 315 阅读 · 0 评论 -
力扣2860 补9.20
第二道周赛题,理解题意要花个半天。然后就是代码,我写的二重循环但有用例超时,大部分700多个用例还有几十没过。i++){//被选中有多少人。不过排序我是没想到的,排序之后看灵神的题解去模拟一下确实很奇妙的可以用一重循环解决。以下是我的双层循环,思路还是清晰的,但慢了。2860.让所有学生保持开心的分组方法数。// 学生之间进行组合。原创 2023-09-22 21:28:51 · 374 阅读 · 0 评论 -
力扣2859 补9.19
开始试试周赛题目,好家伙,第一个简单题就让我搞了2个小时左右才做出来,主要是我看题目还是不仔细,题目理解就有点烦,然后就是Java的各种基础语法都忘了,我用的常规暴力解法,思路还算好想,但毕竟代码实现对我来说还是挺麻烦的。这里getmax函数就是获得pow(2,n)的最大值,且小于num,返回这个最大值,然后二进制就有了一个1,在让num减去最大值直到num为0。num++){//遍历。然后代码有点bug死在了死循环里面,搞了半天。200题,想先试试周赛。原创 2023-09-21 22:59:32 · 310 阅读 · 0 评论 -
力扣538 补9.18
当前结点如果是左节点的话,root.val=root.val+pre.val+dfs(root.right);都和前一个结点有关系,如果找不到那个万能公式的话,就分类讨论多分几种情况。可以做,主要还是分类讨论并找规律。538.把二叉搜索树转换为累加树。原创 2023-09-21 17:02:06 · 399 阅读 · 0 评论 -
力扣108 补9.17
这题代码实现不难,主要是在数组里用二分的思路没想到。对数组进行范围划分后取中间的值就是当前范围的根结点。左右子树的高度就达到要求了。做不来,而且题目一开始理解错了,要的是每个节点的左右子树高度差不超过1,我以为只要这个树总体左右2边高度差不超过1。又是一晚上都用来刷力扣了,恨呐。我咋那么废物,这个简单题还不会做。现在简单题就是一点就通,有点弯就想不出来了,且代码实现不难。108.将有序数组转换为二叉搜索树。原创 2023-09-19 22:41:52 · 242 阅读 · 0 评论 -
力扣669 补9.16
最近大三上四天有早八,真的是受不了了啊,欧嗨呦,早上困如狗,然后,下午困如狗,然后晚上困如狗,尤其我最近在晚上7点到10点这个时间段看力扣,看得我昏昏欲睡,不自觉就睡了1个小时,可能在犯困的时间段不适合做高难度的题目。还有英语也要抓紧搞,好久没搞英语了,力扣每天一题就搞得我没时间搞别的了,基本就是下午在看力扣,然后睡了犯困睡了1小时去吃饭,然后晚上差不多,再想一会,犯困再睡1个小时,睡醒想不出来就看答案。再这样我就没法坚持刷下去了,太低效了,想想自己一天干了啥。原创 2023-09-18 22:34:05 · 200 阅读 · 0 评论 -
力扣450 补9.15
可以做,就是去分类讨论,一开始以为有重复节点,感觉挺麻烦的,不过没有重复结点,感觉好做一点了,这个中等题大概做了有2个小时,水平大概就这样了,也是慢慢磨把思路磨出来的。搞得一直报错,还是指针用的不熟练。450.删除二叉搜索树中的节点。原创 2023-09-17 21:25:06 · 194 阅读 · 0 评论 -
力扣236 补9.14
做不来,我做中等题基本上都是没有思路,这里需要先遍历祖先节点,那必然用先序遍历,这题还是官方题解容易理解,第二火的题解反而把我弄得脑袋昏昏的。原创 2023-09-16 22:39:15 · 238 阅读 · 0 评论 -
力扣501 补9.13
可以做,还是好想的,有点程序上的细节,哈希表通过遍历实现值找到键,另外就是数组的截取。不过我做的明显很麻烦,因为花了791ms,卡尔的C++代码也就30ms,离谱哦。501.二叉搜索树中的众数。原创 2023-09-15 16:43:03 · 171 阅读 · 0 评论 -
力扣530 补9.12
再或者一个个遍历每个结点,把他跟父结点和爷结点比大小,更新最小值,因为要么左边要么右边跟中间节点比大小,不会让左边跟右边比大小。可以做,就是中序遍历,把数从小到大排序,再循环找最小值。530.二叉搜索树的最小绝对差。原创 2023-09-15 10:32:15 · 143 阅读 · 0 评论 -
力扣106 补9.11
先根据后序遍历找到根结点,在根据根结点的数组下标,把中序遍历序列分成2部分,就这样递归不断地分,直到左子树,右子树的数组边界范围出现左边界大于右边界。TreeNode build(int il,int ir,int pl,int pr,int[] postorder){//找到当前的根节点。其实看代码还是很不好理解的,得自己动动脑筋去模拟才行,光看代码就是脑子想动也动不起来,主要我还是经常对着代码半发呆半想,直到想睡觉,效率很低。//参数是左子树的左子树的左右数组范围,右子树的左右数组范围。原创 2023-09-14 23:18:54 · 176 阅读 · 0 评论 -
力扣513 补9.10
这题看起来用层序遍历就很不错,不过需要用到队列,循环,但我还是看答案了,不熟练。513. 找树左下角的值。原创 2023-09-13 23:11:07 · 63 阅读 · 0 评论 -
力扣404 补9.9
感觉可以记住出一个结论就是左递归遍历的都是左结点,同样右递归遍历的都是右结点。原创 2023-09-13 21:22:56 · 46 阅读 · 0 评论 -
力扣257 补9.8
虽然简单题,但太久没写题了,直接看答案,事实上就是正常的按照前序遍历每个结点,找到一个节点就放进path里,一直等到找到叶子结点,一个path结束,然后就是回溯,把最后一个结点删了,进入另一个递归。然后代码实现的话,用Java麻烦一点,因为string不允许修改。相当于就是基本的一次树的遍历,在加上回溯(删除并修改结点)。257.二叉树的所有路径。原创 2023-09-13 20:33:16 · 172 阅读 · 0 评论 -
力扣110 补9.7
int dfs(TreeNode root){//计算每个节点的子树高度差。int dfs_tall(TreeNode root){//计算该树高度。用了2个函数,思路好想的。原创 2023-09-08 21:55:57 · 297 阅读 · 0 评论 -
力扣111 9.6
练个手,我写的有点复杂,if语句要考虑到不同情况。不算难嗷,正常递归。好像是Java语法要求必须要有个return。111.二叉树的最小深度。原创 2023-09-06 15:12:29 · 422 阅读 · 0 评论 -
力扣452 9.5
你要射气球,要是我的话,把重叠在一起气球数最多的那一部分气球一箭全解决掉就行了,我也不知道其中的原理,感觉就应该这样。重叠的气球一起寄掉的条件是最小右边界和最大左边界有重合或者接触。从左往右按顺序射,令每次射箭都射尽量多的气球。有个很重要的也很难理解的一点是为什么要从左到右或者从右到左按顺序射。力扣补不了了,我欠下的太多了,毕竟我落下了一年的进度,这一年来,前半年倒是有心思刷题,后半年因为不可控因素,刷了个寂寞。这题之前一直想不通,不过现在过了小半年,在看这个题,发现思路应该是稍微动脑筋就有的了。原创 2023-09-05 21:41:06 · 70 阅读 · 0 评论 -
力扣(763.56)补9.27
这题基本思路倒是容易有,但是细节问题还是有tm的一大堆。还好力扣会提供未过的用例,要不然真的不知道哪里会错。这题难度正常,能做出来,我也没优化时间复杂度,问就是不太会,hhhhh只做了200题的小chicken。怎么说呢,说是贪心,我依然感受不到。我是把他当滑动窗口做的。763.划分字母区间。原创 2023-04-05 11:58:26 · 322 阅读 · 1 评论 -
力扣(134.860.406.452)补9.26
不过我现在也发现了,贪心不是一个意义非常明确的算法,感觉就是没有一个固定的套路,更多的是数学上的思考吧。没想出来,这题一开始没想清楚怎么做,怎么也想不到贪心算法上,其实贪心,就是数学思维题,想通了就简单,想不通就一直卡着。其实就是记录自己手里的5元,10元,钞票的个数。ps:n,m分别是插入字符串要截取的(真正要插入的部分)即在str2.n位置数m个,不写这个的话就是将str2整个全部插入。这题我用2层循环可以通过35/39个用例,但是卡在一个死变态的,数据贼多,超过时间限制了。406.根据身高重建队列。原创 2023-04-02 16:40:22 · 377 阅读 · 0 评论 -
力扣(45.1005)补9.25
直接看题解吧,累了,别人讲的不错我就不讲了。这个覆盖范围有点双指针的样子了。right用于当前步的最大范围,len用于表示的全局最大覆盖范围。不过这题因为细节问题,也想了挺久的。比起别人的一层循环,这里我的时间复杂度有点高了。这题我是每次都取最优,k次,每次都让总和最大。想不出来,贪心真的很神奇(指我还是没理解),1005. K 次取反后最大化的数组和。原创 2023-03-25 20:10:20 · 335 阅读 · 0 评论 -
力扣(47.55)补9.24
脑子确实没绕过来,仔细想想还真的有些难度,要想得到最大覆盖范围是需要遍历最大范围的每个元素,然后更新最大范围的。i每次移动只能在cover的范围内移动,每移动一个元素,cover得到该元素数值(新的覆盖范围)的补充,让i继续移动下去。已经三个月没刷力扣了,主要是搞Java后端,还有智能车,确实我自己也惭愧,什么都想搞,还没有搞成的,不专一啊。刚看到本题一开始可能想:当前位置元素如果是3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢?这个范围内,别管是怎么跳的,反正一定可以跳过来。原创 2023-03-24 22:44:58 · 400 阅读 · 0 评论 -
力扣(491.46)补9.23
491.递增子序列这个回溯的剪枝操作真的死也想不到。太奇葩了。我以为既要树层去重又要树枝去重,结果就是一个树层去重。class Solution { private: vector<vector<int>> res; vector<int> path; void back(vector<int> nums,int index){ if(path.size()>=2)原创 2023-01-18 14:28:00 · 652 阅读 · 0 评论 -
力扣(78.90)补9.22
78.子集感觉不太难,但是就是不会写。感觉回溯里有很多细节问题。class Solution {private:vector<vector<int>> res;vector<int> num; void back(vector<int>& nums,int index,int end){ res.push_back(num); if(index>=end){ re原创 2023-01-17 16:16:57 · 481 阅读 · 0 评论 -
力扣(131.93)补9.21
131.分割回文串又是不会做的一题呢。代码看起来不难,但想出代码还是很难得。class Solution { public List<List<String>> partition(String s) { List<List<String>> ans=new ArrayList<>(); List<String> list=new ArrayList<>原创 2023-01-16 16:00:13 · 542 阅读 · 0 评论 -
力扣(39.40)补9.20
目前打算刷些算法题,数据结构的题暂时放一放吧。39.组合总和不会,毕竟好久没做回溯了。看了这个图会好理解很多呦。class Solution { List<List<Integer>> ans=new ArrayList<>(); List<Integer> list=new ArrayList<>(); public List<List<Integer>原创 2022-12-24 14:42:48 · 1178 阅读 · 3 评论 -
力扣(15.18)补9.19
15.三数之和我以为不会太难,md不会。其实很让我惊讶的是,双指针用了2层循环但复杂度确是O(n)。牛🐮🐮🐮🐮🐮🐮🐮🐮🐮🐮🐮另外这题除了算法思想,也有很多细节要处理,炒鸡花时间。class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> ans=new ArrayList<原创 2022-12-22 20:10:48 · 448 阅读 · 0 评论 -
力扣(202.454)补9.18
202.快乐数不会。又要用到数学的思想,你要学会去分析。🙁根据上表你需要知道,一个很大的数,经过快乐运算,不可能会一直增大,一定会受到限制。class Solution { private int getNext(int n) { int totalSum = 0; while (n > 0) { int d = n % 10; n = n / 10; totalSu原创 2022-12-21 13:42:35 · 507 阅读 · 0 评论 -
力扣(707.面试题02.07)补9.16
707.设计链表可以,真的是一个工程类的题目,处处要考虑细节,其实20分钟基本能写好,但是改各种细节又要40分钟,就是各种bug,总共花了一个小时才正确。class MyLinkedList { ListNode head=null; public MyLinkedList() { } public int get(int index) { if(head==null) return -1; List原创 2022-12-19 15:24:20 · 370 阅读 · 0 评论 -
力扣(142.1002)补9.17
142.环形链表Ⅱ不会,不过答案用了数学的想法,我以为计算机里只有暴力呢。public class Solution { public ListNode detectCycle(ListNode head) { if(head==null||head.next==null) return null; ListNode p=head; ListNode p2=head; while(true){原创 2022-12-20 15:27:32 · 340 阅读 · 0 评论 -
力扣(647.516)补9.15
647.回文子串dp杀我。布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况。情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串。情况二:下标i 与 j相差为1,例如aa,也是回文子串。情况三:下标:i 与 j相差大于1的时候,例如caba原创 2022-12-18 15:25:01 · 340 阅读 · 0 评论 -
力扣(583.72)补9.14
583.两个字符串的删除操作难于上青天,dp。难度实在不敢恭,照旧看答案。确定dp数组(dp table)以及下标的含义。dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。这里dp数组的定义有点点绕,大家要撸清思路。确定递推公式。当word1[i - 1] 与 word2[j - 1]相同的时候 当word1[i - 1] 与 word2[j - 1]不相同的时候当word1[i - 1] 与 wo原创 2022-12-17 14:20:33 · 283 阅读 · 0 评论 -
力扣(1053.115)补9.13
1053.不相交的线不会,这题和1143题代码一样,只不过题意不太能懂,难想,难想。115.不同的子序列难想,这种题就跟该画dp图去理解,太难了。跟着图去模拟一下,要不然真的答案都看不懂。dp[i][j]:以s(i-1)为结尾的s子串的子序列中出现以t(j-1)为结尾的t子串的个数。s[i - 1] 与 t[j - 1]相等,s[i - 1] 与 t[j - 1] 不相等,当s[i - 1] 与 t[j - 1]相等时,dp[i][j]可以有两部分组成。一部分是原创 2022-12-16 21:52:57 · 453 阅读 · 0 评论 -
力扣(718.1143)补9.12
718.最长重复子数组这题真的想不到。看图的话会好懂很多。class Solution { public int findLength(int[] nums1, int[] nums2) { int n=nums1.length; int n2=nums2.length; int[][] dp=new int[n+1][n2+1]; int result=0; for(int i=1;i<n+原创 2022-12-16 16:50:48 · 379 阅读 · 0 评论 -
力扣(300,674)补9.11
300.最长递增子序列典型dp子序列,但我不会,最难的就是dp数组状态定义。烦。这里定义dp[i]为前i个元素的最长递增子序列。class Solution { public int lengthOfLIS(int[] nums) { int n=nums.length; int result=1; int[] dp=new int[n]; for(int i=0;i<n;i++) dp[i]=1;原创 2022-11-29 16:14:55 · 193 阅读 · 0 评论 -
力扣(98.107)补9.10
98.验证二叉搜索树这题我真的头疼,想了很久的算法,想了又改,改了又想,总是有bug,80个用例过70多个,最后实在无力回天了。搞得代码跟屎山一样。。这个递归遍历的思路是,每遍历到右子树结点,更新该结点的最大值,每遍历到左结点,更新该节点的最小值。这里是递归有2个参数同时遍历左右子树。class Solution { public boolean isValidBST(TreeNode root) { return isValidBST(root, Long.M原创 2022-11-19 16:25:05 · 342 阅读 · 0 评论 -
力扣(700.701)补9.9
700.二叉搜索树中的搜索可以做,这个倒不难。class Solution { TreeNode p=null; public void f(TreeNode root,int val){ if(root==null) return ; if(root.val==val) p=root; if(root.val>val) f(root.left,val);原创 2022-11-17 15:57:54 · 191 阅读 · 0 评论 -
力扣(226.112)补9.8
226.翻转二叉树可以做,先确定递归函数的作用(定义),再看递归函数需要怎么遍历以及每次遍历需要做什么。class Solution {public void invert(TreeNode root){ if(root==null) return; if(root.left==null&&root.right==null) return; TreeNode t=new TreeNode(); t=root.原创 2022-11-16 16:53:25 · 231 阅读 · 0 评论 -
力扣(104.101)补9.7
104.二叉树的最大深度可以做,普通递归,但我也想了10分钟,我好垃圾啊,我是超级菜鸡。一点也不熟练。class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0; else return Math.max(maxDepth(root.left),maxDepth(root.right))+1; }}101.对称二叉树原创 2022-11-15 23:58:15 · 124 阅读 · 0 评论 -
力扣(20.232)补9.6
20.有效的括号可以做,也就是普通括号匹配问题。可能我还做麻烦了。class Solution { public boolean isValid(String s) { Stack<Character> stack=new Stack<>(); int n=s.length(); int i=0; for(i=0;i<n;i++){ if(s.charAt(i)=='(原创 2022-11-15 00:12:04 · 118 阅读 · 0 评论 -
力扣(674.160)补8.30
674.最长连续递增序列这题我果断超时,搞得我做简单题都没信心了😢class Solution { public int findLengthOfLCIS(int[] nums) { int max=1; for(int i=0;i<nums.length;i++){ int j=i; while(j<nums.length-1){ if(nums[j原创 2022-11-02 16:43:38 · 133 阅读 · 0 评论