草庐IT

Leetcode刷题第六周

全部标签

LeetCode:376.摆动序列

个人主页:仍有未知等待探索-CSDN博客专题分栏:算法_仍有未知等待探索的博客-CSDN博客题目链接:376.摆动序列-力扣(LeetCode)一、题目如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如, [1,7,4,9,2,5] 是一个 摆动序列 ,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反,[1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。子序列 可以通过从

搜索与图论第六期 最短路问题

前言最短路问题真的很重要很重要希望大家都能够完全掌握所有最短路算法!!一、最短路问题的分类Dijkstra:Dijkstra算法是一种著名的图算法,主要用于求解有权图中的单源最短路径问题。它由荷兰计算机科学家艾兹赫尔·戴克斯特拉(EdsgerWybeDijkstra)在1956年首次提出。Dijkstra算法的核心思想是通过以下步骤逐步构建最短路径树:初始化:创建一个空白的最短路径字典,其中每个节点的距离设置为无穷大,起始节点的距离设置为0。标记已访问节点:创建一个已访问节点集合,并将所有节点都加入这个集合。更新距离:对于未被访问的节点,从其未被访问的邻居中选择距离当前节点最近的邻居,将其

【Leetcode】410. 分割数组的最大值

文章目录题目思路1.max_element2.partial_sum3.upper_bound4.distance代码运行结果题目题目链接给定一个非负整数数组nums和一个整数k,你需要将这个数组分成k个非空的连续子数组。设计一个算法使得这k个子数组各自和的最大值最小。示例1:输入:nums=[7,2,5,10,8],k=2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5]和[10,8]。因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。示例2:输入:nums=[1,2,3,4,5],k=2输出:9示例3:输入:nums=[1,4,4]

代码随想录算法训练营第16天| Leetcode 110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

目录Leetcode110.平衡二叉树Leetcode257.二叉树的所有路径Leetcode 404.左叶子之和Leetcode110.平衡二叉树题目链接:Leetcode110.平衡二叉树题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。思路:由于本题是比较左右子树高度差,因此使用后序遍历更合适。分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。代码如下:(递归法)classSolution{public:intgetHeight

代码随想录算法训练营第六天| 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和

目录242有效的字母异位词349两个数组的交集202快乐数1两数之和242有效的字母异位词排序classSolution{public:boolisAnagram(strings,stringt){sort(s.begin(),s.end());sort(t.begin(),t.end());returnt==s;}};时间复杂度O(nlogn)空间复杂度O(logn)哈希表 classSolution{public:boolisAnagram(strings,stringt){if(s.size()!=t.size())returnfalse;vectortable(26,0);for(ch

【刷题篇】动态规划(八)

文章目录1、分割回文串IV2、分割回文串II3、最长回文子序列4、让字符串成为回文串的最少插入次数5、最长公共子序列6、不相交的线1、分割回文串IV给你一个字符串s,如果可以将它分割成三个非空回文子字符串,那么返回true,否则返回false。当一个字符串正着读和反着读是一模一样的,就称其为回文字符串。classSolution{public:boolcheckPartitioning(strings){intn=s.size();vectorvectorbool>>dp(n,vectorbool>(n,false));for(inti=n-1;i>=0;i--){for(intj=i;jn;

web安全第六天:绕过白名单监测实现文件上传

3.1黑名单概念(随机构造一个后缀名,能上传即为黑名单)一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字符或者字符串,当数据包中含有符合该列表的字符串时,即认定该数据包是非法的。3.2如何确认黑白名单因为黑名单是不允许我们的数据包含有符合黑名单列表的字符串,所以我们只需要随意构造一个不在它列表中的数据包即可。3.3利用后缀大小写绕过在Windows中,大小写是不敏感的。例如:“index.html”和“index.htmL”访问的结果是一样的。3.4利用空格绕过在Windows中,文件保存的时候如果文件后缀名末尾有空格会自动去掉。例如:“phpinfo.php"W

Leetcode03 用滑动窗口思想来解决字符串问题

什么是滑动窗口思想:滑动窗口是一种算法技巧,用于解决一类涉及子串/子数组的问题。滑动窗口可以通过定义两个指针(通常是左右指针或起始和结束指针),来构建一个可变大小的窗口,从而在给定的数据结构(如字符串或数组)上移动窗口,并实时更新窗口内的状态。滑动窗口算法的基本思想是:初始化窗口的左右边界,使窗口包含初始的元素或子串。不断移动右边界,扩大窗口,同时根据问题要求进行相应的操作(如计算最小值、最大值、求和等)。如果窗口内的状态满足某个条件,尝试缩小窗口,即移动左边界,继续进行步骤2。重复步骤2和3,直到右边界到达数据结构的末尾。滑动窗口主要分为两大类,一种是长度固定的滑动窗口,一种是长度动态变化的

【每日一题】3.LeetCode——相交链表

📚博客主页:爱敲代码的小杨.✨专栏:《JavaSE语法》❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!文章目录1.题目描述示例1:示例2:提示2.思路3.代码1.题目描述给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。自定义评测:评测系统的输入如下(你设计的程序不适用此输入):intersectVal-相交的起始节点的值。如果不存在相

leetcode—矩阵

1矩阵置零给定一个 mxn 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。示例1:输入:matrix=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]方法一:使用标记数组新建两个标记数组rowcolumn第一次遍历数组记录数组中每一行每一列中的值是否为0第二次遍历数组将数组中0所在的行和列设置为0classSolution{publicvoidsetZeroes(int[][]matrix){intm=matrix.length;intn=matrix[0].length;//新建两个数组记录