- 博客(35)
- 收藏
- 关注
原创 基于计算机视觉的交通路口智能监控系统
智能交通监控系统采用识别技术进行分析,有异常状况发生(比如,当有行人闯红灯时、路口车辆和行人流量过大,导致堵塞交通时)就会自动通知交通管理人员.基于以上背景,我简要介绍一下本项目的设计架构.项目主要由三个模块组成,分别是:SRS流媒体服务器,云端GPU服务器,本地客户端.首先,网络摄像机将交通路口的监控视频实时上传到SRS流媒体服务器。然后,当SRS流媒体服务器有视频流输入时,云端GPU服务器拉取原始视频流,然后通过YOLO等目标检测算法对视频进行分析和处理,然后将处理后的视频推流到SRS服务器。
2024-05-11 17:55:40 1911
原创 D41第九章 动态规划part03● 343. 整数拆分 ● 96.不同的二叉搜索树
2、确定递推公式,可以想dp[i]最大乘积是怎么得到的呢,其实可以从1遍历j,然后有两种渠道得到dp[i].一个是j*(i-j)直接相乘。给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。1、确定dp数组以及下标的含义,dp[i]分拆数字i,可以得到最大乘积dp[i].第九章 动态规划part03。96.不同的二叉搜索树。
2023-04-26 07:36:34 186
原创 D39第九章 动态规划part02● 62.不同路径 ● 63. 不同路径 II
注意题目中说机器人每次只能向下或者向右移动一步,那么起始机器人走过的路径可以抽象为一颗二叉树,而叶子结点就是终点,此时问题就可以转化为求二叉树叶子结点的个数,想要求dp[i][j],只能由两个方向来推导出来,即dp[i-1][j],dp[i][j-1]确定数组以及下标的含义:表示从(0,0)出发,到(i,j)有dp[i][j]条不同的路径。动态规划:机器人从(0,0)位置出发,到(m-1,n-1)终点。表示从(0,0)出发,到(i,j)有dp[i][j]条不同的路径。1、确定数组及其下标的含义,
2023-04-26 05:59:10 190
原创 D38第九章 动态规划part01● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
如何可以推出dp[i]呢,从dp[i]的定义可以看出,dp[i]可以有两个方向退出来,首先是dp[i-1],上i-1层楼梯,有dp[i-1]种方法,那么再一步跳一个台阶不就是dp[i[了吗。还有就是dp[i-2],上i-2层楼梯,有dp[i-2]种方法,那么再一步跳两个台阶不就是dp[i]了吗。那么dp[i]就是dp[i-1]+dp[i-2]。从递归公式dp[i]=dp[i-1]+dp[i-2];1、确定dp数组以及下标的含义 dp[i]的定义为:第i个数的斐波那契数值是dp[i]5、举例推导dp数组。
2023-04-26 05:25:12 178
原创 D37第八章 贪心算法 part06 ● 738.单调递增的数字 ● 968.监控二叉树 ● 总结
从前向后遍历的话,遇到strnum[i-1]>strnum[i]的情况,让strnum[i-1]减一,但此时如果减一,可能又小于strnum[i-2].这么说有点抽象,举个例子:332会变成329,此时2又小于前一位了,真正的结果应该是299.那么从后向前遍历,就可以重复利用上次比较得出的结果了,从后往前遍历332的数值变化为332》329》299确定了遍历顺序后,那么此时局部最优就可以退出全局,找不出反例。那么空节点不能是无覆盖的状态,这样叶子结点就要放摄像头了,空节点也不能是有摄像头的状态,。
2023-04-26 03:58:00 138
原创 D36第八章 贪心算法 part05● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
在遍历的过程中相当于是找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。题目要求同一字母最多出现在一个片段中。字符串s由小写字母组成我们把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等,则找到了分割点。的ASCII码值得到的索引)更新为当前字符在字符串。第八章 贪心算法 part05。
2023-04-26 02:38:58 128
原创 D35第八章 贪心算法 part04● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
直觉上来看,貌似只射重叠最多的气球,用的弓箭一定最少,那么有没有当前重叠了三个气球,我射两个,留下一个和后面的一起射这样弓箭用的更少的情况?那么按照气球起始位置排序,还是按照气球终止位置排序呢 其实都可以,只不过对应的遍历顺序不同,我就按照气球的其实位置排序了。如果真实的模拟射气球的过程,应该射一个,气球数组就移除一个元素,这样最直观,毕竟气球被射了。但仔细思考一下就发现:如果把气球排序之后,从前到后遍历气球,被射过的气球仅仅跳过就行了,没有必要让气球数组移除气球,只要记录一下箭的数量就可以了。
2023-04-25 22:30:28 68
原创 D34第八章 贪心算法 part03● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果
相邻的孩子中,评分高的孩子必须获得更多的糖果。先确定右边评分大于左边的情况,此时局部最优:只要右边评分比左边大,右边孩子就多一颗糖果,全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果。为什么一旦【0,i】区间和为负数,起始位置就可以是i+1呢,i+1后面就不会出现更大的负数?i从0开始累加到rest[i],和记为cursum,一旦cursum小于0,说明【0,1】区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算cursum。
2023-04-25 20:45:53 44
原创 D32第八章 贪心算法 part02● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II
122.买卖股票的最佳时机II。第八章 贪心算法 part02。
2023-04-23 15:40:07 54
原创 D31第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和
【代码】D31第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和。
2023-04-23 13:11:54 123
原创 d27第七章 回溯算法part03● 39. 组合总和● 40.组合总和II● 131.分割回文串
【代码】d27第七章 回溯算法part03● 39. 组合总和● 40.组合总和II● 131.分割回文串。
2023-04-22 20:38:31 56
原创 D25第七章 回溯算法part02今日内容: ● 216.组合总和III● 17.电话号码的字母组合
17.电话号码的字母组合。216.组合总和III。
2023-04-22 18:43:43 45
原创 D24第七章 回溯算法part01 今日内容:● 理论基础 ● 77. 组合
对于这段代码来说,每层递归代表了生成组合的一个位置,从左到右依次选择可能的元素,并且在每一层中从当前位置的下一个数字开始搜索,直到达到组合的长度为止。这段代码使用了深度优先搜索(DFS)的思想来解决组合问题。DFS 是一种通过递归的方式在搜索树中深入探索,并在到达叶子节点时回溯到上一层节点的算法。这种方式通过深度优先搜索,逐步生成组合,并在需要时进行回溯,从而找到所有可能的组合。
2023-04-18 20:12:23 56
原创 D23第六章 二叉树part07今日内容 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先
● 236. 二叉树的最近公共祖先。● 530.二叉搜索树的最小绝对差。● 501.二叉搜索树中的众数。
2023-04-18 13:40:42 37
原创 D22第六章 二叉树part08今日内容: ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
算法的思路是基于二叉搜索树的性质,即对于任意节点,它的左子树的所有节点值都小于它,右子树的所有节点值都大于它。为 null,表示在 BST 中未找到。的最低公共祖先节点,即二叉搜索树中离。● 235. 二叉搜索树的最近公共祖先。最近且同时是它们的祖先节点的节点。● 450.删除二叉搜索树中的节点。● 701.二叉搜索树中的插入操作。如果上述两个条件都不满足,说明。的最低公共祖先,直接返回。递归调用的终止条件是。
2023-04-18 08:11:59 100
原创 D21第六章 二叉树part09 今日内容:● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇
● 108.将有序数组转换为二叉搜索树。● 538.把二叉搜索树转换为累加树。● 669. 修剪二叉搜索树。
2023-04-18 06:12:26 37
原创 D20第六章 二叉树 part06今日内容 ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
算法的思想是通过递归的方式从数组中选择最大值作为根节点,然后将数组划分为左右子数组,再分别递归地构建左右子树,直到数组中没有元素或只有一个元素。如果数组长度大于 1,就遍历数组找到数组中的最大值及其索引,作为当前子树的根节点。的节点,将其对应的节点值相加,并将和作为新节点的值。方法中,首先判断数组的长度是否为 0 或 1,如果是,则直接创建一个包含对应元素的节点作为子树的根节点。都可以得到数组中唯一的元素,并创建一个以该元素为值的新节点作为子树的根节点,并返回该节点。的结果为 1,表示数组中只有一个元素。
2023-04-17 15:18:53 92
原创 D18● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
方法 int findBottomLeftValue(TreeNode root): 创建一个队列 que 如果 root 不为空,将 root 入队 初始化 result 为 0 当 que 不为空时循环: 获取队列的当前大小,赋值给 size 循环 size 次: 从队列头部取出一个节点,赋值给 node 如果当前是第一次循环(i == 0),将 node 的值赋给 result(记录最后一行第
2023-04-15 16:29:35 81
原创 D17● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
以上的实现通过递归的方式来判断二叉树是否是高度平衡的,递归地计算每个节点的左子树和右子树的高度,并比较其高度差是否超过 1,从而判断整个二叉树是否是高度平衡的。否则,递归地计算左子树和右子树的高度,并返回较大的高度值加 1,表示当前节点的高度。实现了binaryTreePaths方法,该方法接受一个二叉树的根节点作为输入,返回一个包含所有从根节点到叶子节点的路径的字符串列表。如果当前节点的左子树和右子树高度差没有超过 1,则继续递归判断当前节点的左子树和右子树是否都是高度平衡的,如果都是,则返回。
2023-04-15 10:32:22 83
原创 D16● 104.二叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
104.二叉树的最大深度当我们在maxDepth方法中使用递归时,我们实际上是在将问题不断地分解为更小的子问题,并通过递归调用来解决这些子问题。在这个问题中,我们需要计算二叉树的最大深度,即从根节点到叶子节点的最长路径上的节点数。我们可以将这个问题分解为计算左子树和右子树的最大深度的两个子问题,并将其结果合并,从而得到整个二叉树的最大深度。我们从根节点开始,对于每个节点,都有两个可能的子节点:左子节点和右子节点。我们可以通过递归地调用maxDepth方法来计算左子树和右子树的最大深度。
2023-04-14 15:45:44 110
原创 第六章 二叉树 part02今日内容: ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2
【代码】第六章 二叉树 part02今日内容: ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2。
2023-04-10 13:32:02 108
原创 ●day 14 ● 理论基础● 递归遍历 ● 迭代遍历● 统一迭代
写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
2023-03-29 19:06:58 31
原创 Day11● 20. 有效的括号● 1047. 删除字符串中的所有相邻重复项● 150. 逆波兰表达式求值
【代码】Day11● 20. 有效的括号● 1047. 删除字符串中的所有相邻重复项● 150. 逆波兰表达式求值。
2023-03-26 22:57:16 34
原创 day9字符串和双指针总结
本文中一共介绍了leetcode上九道使用双指针解决问题的经典题目,除了链表一些题目一定要使用双指针,其他题目都是使用双指针来提高效率,一般是将O(n^2)的时间复杂度,降为$O(n)$。代码随想录字符串总结。
2023-03-24 10:14:58 39
原创 代码随想录算法训练营第八天344.反转字符串541. 反转字符串II剑指Offer 05.替换空格151.翻转字符串里的单词剑指Offer58-II.左旋转字符串
里面唯一需要注意的是left和right指针的关系,如果字符串中的元素为奇数个时候,最中间的元素不需要进行移动,如果为偶数个时候,没有最中间元素,其他元素都已经移动完成,所以此时while循环里是没有等于号的。剑指Offer58-II.左旋转字符串。剑指Offer58-II.左旋转字符串。剑指Offer 05.替换空格。剑指Offer 05.替换空格。151.翻转字符串里的单词。151.翻转字符串里的单词。541. 反转字符串II。541. 反转字符串II。
2023-03-23 21:33:46 54
原创 代码随想录算法训练营第七天day7● 454.四数相加II● 383. 赎金信● 15. 三数之和● 18. 四数之和
● 454.四数相加II● 383. 赎金信● 15. 三数之和● 18. 四数之和 四数相加II给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的
2023-03-22 16:35:24 1012
原创 代码随想录算法训练营第6天|Leetcode 1、两数之和、Leetcode 202 快乐数、 Leetcode 242 有效的字母异位词、 Leetcode 349 两个数组的交集
这样就将字符串s中字符出现的次数,统计出来了。因为本地,我们不仅要知道元素有没有遍历过,还有知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。需要把字符映射到数组也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。需要定义一个多大的数组呢,定一个数组叫做record,大小为26 就可以了,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。
2023-03-21 19:42:29 206
原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、42.环形链表II
设计思路:这里是交换相邻的两个结点,第一步需要设置一个虚拟头结点,用于避免对头结点的特殊处理,并使虚拟头结点指向头结点。第二步要设置一个当前变量,指向需要交换的两个结点之前,这里先指向cur。第三步要设置三个临时变量,前两个用于表示需要处理的两个结点,第三个指向下一次需要处理的第一个结点。第四步要判断循环条件,即要满足cur.next和cur.next.next都不为空。思路:第一步:设置两个指针指向headA和headB.设置两个变量记录两个链表的长度。第三步:让curA为最长的链,lenA为其长度。
2023-03-19 19:38:36 25
原创 代码随想录Day3-Leetcode203.移除链表元素,707.设计链表,206.反转链表
2、整体的思路:定义一个虚拟头结点并指向头结点使得对每个元素的操作都是一样的----定义一个prev结点表示前驱结点----判断prev.next.val是否是需要删除的元素,如果是,就进行prev.next=prev.next.next操作,再判断prev.next.val是否需要删除,即循环判断即可,判断条件是prev.next!这里最需要注意的是我们设置虚拟头结点是不直接当做索引的,所谓的第index个结点,指的是索引,为0时表示的是头结点,而不是虚拟头结点,但是实际上虚拟头结点的索引值才是0.
2023-03-18 16:12:40 30
原创 随想录训练营Day2|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
需要县创建一个新数组,然后定义i,j变量,i指向最左边,j指向最右边,然后比较平方后的大小,把大的放入新数组,其中结束条件是i<=j,等于也要。1.这道题有四种需要遍历的不同需求,所以需要找到一种范围让每次的遍历都满足。首先,两边大,中间小是数组的最大特点,所以可以想到通过双指针来实现。第一次接触滑动窗口,觉得很神奇,其实还是双指针的原理。2.offset表示圈数,需要遍历offset/2圈。3.如果是奇数,只需单独处理最后一个元素即可;
2023-03-16 23:18:06 408
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
704、给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。自己的想法:之前已经学习过二分查找的知识,但是写代码还是出现了很多问题。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。自己的想法:快慢指针,快指针先遍历数组,覆盖要移除的元素。的元素,并返回移除后数组的新长度。
2023-03-15 23:19:27 200 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人