草庐IT

LeetCode刷题第七周

全部标签

【LeetCode-337】打家劫舍III(动态规划)

目录题目描述解法1:动态规划代码实现题目链接题目描述在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。解法1:动态规划这道题目算是树形dp的入门题目,因为是在树上进行状态转移,我们在讲解二叉树的时候说过递归三部曲,那么下面我以递归三部曲为框架,其中融合动规五部曲的内容来进行讲解。确定递归函数的

【刷题】Leetcode 1609.奇偶树

Leetcode1609.奇偶树题目描述广度优先搜索(BFS)深度优先算法(DFS)思路一(BFS)思路二(DFS)Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!!题目描述根据题目信息,我们可以整理出一些基本思路。首先我们需要想办法遍历每层数据其中需要记录二叉树当前深度。遍历的过程中进行判断,不符合要求就返回false基本就需要做到这两大板块就可以完成我们的任务了。重要的是这个过程如何实现:这里我们用到两个常用方法:广度优先搜索(BFS)和深度优先搜索(DFS)。下面初步解释一下两种算法:广度优先搜索(BFS)广度优先搜索是连通图的一种遍历算法,是很多重要图算法的原型(比如Dijks

LeetCode - 1371 每个元音包含偶数次的最长子字符串(Java & JS & Python & C)

题目来源1371.每个元音包含偶数次的最长子字符串-力扣(LeetCode)题目描述给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 'a','e','i','o','u',在子字符串中都恰好出现了偶数次。示例示例1输入:s="eleetminicoworoep"输出:13解释:最长子字符串是"leetminicowor",它包含e,i,o 各2个,以及0个a,u。示例2输入:s="leetcodeisgreat"输出:5解释:最长子字符串是"leetc",其中包含2个e。示例3输入:s="bcbcbc"输出:6解释:这个示例中,字符串"bcbcbc"本身就是最

【好书推荐-第七期】《RTC程序设计:实时音视频权威指南》(音视频开发必看!)

😎作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:洲与AI。🎈本文专栏:本文收录于洲洲的《送书福利》系列专栏,该专栏福利多多,只需关注+点赞+收藏三连即可参与送书活动!欢迎大家关注本专栏~专栏一键跳转🤓同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。🌼同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以私信我加入我的社群~社群中将不定时分享各类福利🖥随时欢迎您跟我沟通,一起交流,一起成长、进步!点此即可获得联系方式~本文目录推

算法沉淀——动态规划之完全背包问题(leetcode真题剖析)

算法沉淀——动态规划之完全背包问题01.【模板】完全背包02.零钱兑换03.零钱兑换II04.完全平方数完全背包问题是背包问题的一种变体,与01背包问题不同,它允许你对每种物品进行多次选择。具体来说,给定一个固定容量的背包,一组物品,每个物品有重量和价值,目标是找到在背包容量范围内,使得背包中的物品总价值最大的组合。相较于01背包问题,完全背包问题允许对每个物品进行多次选择,即每个物品都有无限件可用。动态规划解法:定义状态:通常使用二维数组dp[i][j]表示在前i个物品中,背包容量为j时的最大总价值。状态转移方程:考虑第i个物品,可以选择放入背包或者不放入。如果选择放入,那么总价值为dp[i

C++类开发第七篇(详细说说多态和编译原理)

polymorphism静态联编和动态联编多态性(polymorphism)提供接口与具体实现之间的另一层隔离,从而将”what”和”how”分离开来。多态性改善了代码的可读性和组织性,同时也使创建的程序具有可扩展性,项目不仅在最初创建时期可以扩展,而且当项目在需要有新的功能时也能扩展。c++支持编译时多态(静态多态)和运行时多态(动态多态),运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运行时多态。静态多态和动态多态的区别就是函数地址是早绑定(静态联编)还是晚绑定(动态联编)。如果函数的调用,在编译阶段就可以确定函数的调用地址,并产生代码,就是静态多态(编译时多态),就是说地址是早

LeetCode198.打家劫舍

题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。示例输入:[1,2,3,1]输出:4解释:偷窃1号房屋(金额=1),然后偷窃3号房屋(金额=3)。偷窃到的最高金额=1+3=4。输入:[2,7,9,3,1]输出:12解释:偷窃1号房屋(金额=2),偷窃3号房屋(金额=9),接着偷窃5号房屋(金额=1)。偷窃到的最高金额=2+9+1=12。思路这是一个经典的

算法沉淀——BFS 解决拓扑排序(leetcode真题剖析)

算法沉淀——BFS解决拓扑排序01.课程表02.课程表II03.火星词典Breadth-FirstSearch(BFS)在拓扑排序中的应用主要是用来解决有向无环图(DAG)的拓扑排序问题。拓扑排序是对有向图中所有节点的一种线性排序,使得对于每一条有向边(u,v),节点u在排序中都出现在节点v的前面。如果图中存在环路,则无法进行拓扑排序。BFS解决拓扑排序的步骤如下:统计每个节点的入度(in-degree),即指向该节点的边的数量。将所有入度为0的节点加入队列。对于每个入度为0的节点,依次出队,更新其相邻节点的入度,将入度变为0的节点加入队列。重复步骤3直到队列为空。如果最终遍历过的节点数等于图

LeetCode:225. 用队列实现栈、232. 用栈实现队列(Java)

        比较简单,之前写过C++版本的,正好每日一题,所以再写一个Java版,原理就不在赘述,跟着代码自己模拟一下就很容易明白了。Leetcode:225.用队列实现栈(C++)-CSDN博客Leetcode:232.用栈实现队列(C++)_请实现一个myqueue类,实现出队,入队,求队列长度.实现入队函数voidpush(int-CSDN博客目录225.用队列实现栈题目描述:实现代码:232.用栈实现队列题目描述:实现代码:225.用队列实现栈题目描述:        请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 em

代码随想录Day01|LeetCode707.二分查找、LeetCode27.移除元素

二分查找力扣题目链接思路        首先,二分查找的前提是有序的数组,如果不是有序数组,则不适用二分查找。其次,确定要查找的区间,这个很重要。一般来说,通常有左闭右闭和左闭右开这两个区间,不同的区间在写法上也会有不同,这是很多人会出错的地方。左闭右闭intsearch(vector&nums,inttarget){intl=0,r=nums.size()-1;//左闭右闭区间while(ltarget)r=mid-1;//查找的数比中间的数小则更新右区间elseif(nums[mid]在左闭右闭区间中,因为是包含最左边和最右边的数,所以l=0,r=nums.size()-1;(如果是左闭右