草庐IT

LeetCode刷题第七周

全部标签

力扣刷题之旅:进阶篇(五)—— 动态规划(DP)的妙用

          力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。  --点击进入刷题地址 引言:         在算法的世界中,动态规划(DynamicProgramming,DP)是一种非常重要的思想,它帮助我们解决了许多看似复杂的问题。在力扣(LeetCode)上,DP题目的挑战性和实用性都备受赞誉。今天,我们将深入探讨一道DP的经典题目:“打家劫舍”。题目描述:        你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,你希望偷窃得到的现金总额最大。但是,相邻的房屋装有

「优选算法刷题」:连续数组

一、题目给定一个二进制数组 nums ,找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例1:输入:nums=[0,1]输出:2说明:[0,1]是具有相同数量0和1的最长连续子数组。示例2:输入:nums=[0,1,0]输出:2说明:[0,1](或[1,0])是具有相同数量0和1的最长连续子数组。提示:1nums[i] 不是 0 就是 1二、思路解析看到这道题,我的第一想法是遍历数组,然后用哈希表记录每次遍历的结果,与子数组长度最长的一次判断,然后更新结果。然后我在思考如何优化的时候,看到一位大神的奇特思路:•本题让我们找出⼀段连续的区间,0和 1出现的次数相同。•如

动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】

动态规划动态规划之第N个泰波那契数/三步问题动态规划LeetCode题目第N个泰波那契数求解1求解2(滚动数组)三步问题求解1求解2(滚动数组)动态规划  如果问题是由重叠的子问题构成的,那就可以用动态规划(dynamicprogramming)来解决它。  在求解动态规划问题的时候,我们需要思考以下5个步骤:状态表示(这是最重要的):我们会创建一个dp表,将较小问题的解放在表中,这样我们就会得到原始问题的解,所以状态表示就是清楚dp表里面某个位置所表示的含义。状态转移方程(最难的):也就是从题干中找到关于dp[i]的等式。初始化:填表时,保证不越界。当求解问题时,需要知道较小问题的解,较小问

【刷题】leetcode 1544.整理字符串

刷题1544.整理字符串思路一(模拟栈速解版)思路二(原地算法巧解版)思路三(C++栈版)Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!!1544.整理字符串来看题目描述我看到本题的第一想法是双指针法,但是我所构想的逻辑无法达到目的,具体来说我采用前后指针,依次前进,然后满足条件就跳过,这样就导致会忽略许多满足的结构,就让我十分头疼,调试了半天还是不行,甚至想要使用三指针,四指针…服啦!结果表明都是不行的。下面来一起看看正确解法吧思路一(模拟栈速解版)这个和括号匹配问题很像,把字符串依次入栈,然后满足条件的就一起消除,主要就用到栈的压栈操作和取栈顶操作。这样一一匹配就能达到要求。来看

算法沉淀——动态规划之回文串问题(上)(leetcode真题剖析)

算法沉淀——动态规划之回文串问题01.回文子串02.最长回文子串03.分割回文串IV04.分割回文串II05.最长回文子序列06.让字符串成为回文串的最少插入次数01.回文子串题目链接:https://leetcode.cn/problems/palindromic-substrings/给你一个字符串s,请你统计并返回这个字符串中回文子串的数目。回文字符串是正着读和倒过来读一样的字符串。子字符串是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例1:输入:s="abc"输出:3解释:三个回文子串:"a","b","c"示例

算法沉淀——动态规划之子序列问题(上)(leetcode真题剖析)

算法沉淀——动态规划之子序列问题01.最长递增子序列02.摆动序列03.最长递增子序列的个数04.最长数对链01.最长递增子序列题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,101],因此长度为

代码随想录算法训练营第七天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和,总结

每天要做运动哦。目录 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和 总结   454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序执行效率,降低时间复杂度,当然使用哈希法 会提高空间复杂度,但一般来说我们都是舍空间 换时间, 工业开发也是这样。题目链接/文章讲解/视频讲解:代码随想录题目:给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i,j,k,l) 能满足:0nums1[i]+nums2[j]+nums3[k]+nums4[l]==0思路:这次试一

【C语言必刷题】5.判断闰年

📚博客主页:爱敲代码的小杨.✨专栏:《JavaSE语法》|《数据结构与算法》|《C生万物》❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!文章目录🔥题目描述🔥解题思路🔥代码🔥扩展🔥题目描述使用C语言输出一个年份,判断这个年份是否为闰年。🔥解题思路判断闰年的方法:四年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。每四百年再一闰:如果year能够被400整除,则year是闰年。🔥代码#includeintmain(){ intyear=0; scanf("%d",&year); if(((yea

LeetCode35. 搜索插入位置(C++)

LeetCode35.搜索插入位置题目链接代码题目链接https://leetcode.cn/problems/search-insert-position/代码classSolution{public:intsearchInsert(vectorint>&nums,inttarget){intleft=0;intright=nums.size()-1;while(leftright){intmiddle=left+(right-left)/2;if(nums[middle]>target){right=middle-1;}elseif(nums[middle]target){left=mid

LeetCode704. 二分查找(C++)

LeetCode704.二分查找题目链接代码题目链接https://leetcode.cn/problems/binary-search/description/代码classSolution{public:intsearch(vectorint>&nums,inttarget){intleft=0;intright=nums.size()-1;while(leftright){intmiddle=left+(right-left)/2;if(nums[middle]>target){right=middle-1;}elseif(nums[middle]target){left=middle+