E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
力扣日记
小马的
力扣日记
Day3 数组 #209 长度最小的子数组
#209长度最小的子数组题目思路这个题拿到之后首先考虑了两种思路。第一种思路:从前往后遍历数组每一个数,从该数开始往后一直加,直到和大于等于target,就记录下该子串的长度,如果小于之前其他子串的长度,就用这个长度覆盖掉最小子数组长度,然后记录下该下标Index。这样的做法需要遍历每一个数,且最坏情况下,每一次都需要遍历到最后一个数才有结果,所以时间复杂度。第二种思路,既然题目是要找最小长度的子
氟西汀发送机
·
2021-12-03 18:43
小马的
力扣日记
Day2 数组 #27 移除元素 #977 有序数组的平方
#27移除元素思路由于它实际调用接口的例子是图上这样,输出的限制就比较多。要求原地删除val,不能开新的数组来存进行删除操作后的数组,那么每次检测到val就把它后面的所有数前移一位。遍历数组,每次检测到val就将之后的数前推一位,然后计数count加1。nums.lenth-count=输出的数组长度lenth。Case1:没有相邻且等于val的数,那么正常运行Case2:最后一位数等于val,随
氟西汀发送机
·
2021-12-03 10:35
【
力扣日记
】088 合并两个有序数组 | 面试题10.01
题目描述给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素。输入:nums1=[1,2,3,0,0,0],m=3nums2=[2,5,6],n=3输出:[1,2,2,3,5,6]算法思路1、内置函数cl
心有泠兮。
·
2020-09-15 10:42
力扣日记
leetcode
python
【
力扣日记
】打家劫舍! 198,213,337 | 动态规划
198打家劫舍I题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。算法思路动态规划!!重点在于状态转移方程先初始化dp数组:dp=[0]*len(nums)简单
心有泠兮。
·
2020-09-15 04:54
力扣日记
leetcode
python
动态规划
【
力扣日记
】572 另一个树的子树 | 递归 DFS
题目描述给定两个非空二叉树s和t,检验s中是否包含和t具有相同结构和节点值的子树。s的一个子树包括s的一个节点和这个节点的所有子孙。s也可以看做它自身的一棵子树。算法思路第一版参考镜像二叉树。classSolution:k=0defisSubtree(self,s:TreeNode,t:TreeNode)->bool:defBB(s,t):ifnots:returnifself.k:returni
心有泠兮。
·
2020-09-15 03:54
力扣日记
leetcode
二叉树
python
【
力扣日记
】面试题02.02 返回倒数第K个节点 | 链表 | 快慢指针
题目描述实现一种算法,找出单向链表中倒数第k个节点。返回该节点的值。类似019删除链表的倒数第K个节点算法思路简单粗暴的:classSolution:defkthToLast(self,head:ListNode,k:int)->int:ls=[]whilehead:ls.append(head.val)head=head.nextreturnls[-k]快慢指针:classSolution:de
心有泠兮。
·
2020-08-25 15:48
力扣日记
leetcode
链表
指针
【
力扣日记
】697 数组的度
题目描述看评论感觉又是一道阅读理解?对着例子看也挺简单的啊。给定一个非空且只包含非负数的整数数组nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是找到与nums拥有相同大小的度的最短连续子数组,返回其长度。度:数组中的众数数量。求与nums拥有相同大小的度的最短连续子数组,返回其长度。算法思路classSolution:deffindShortestSubArray(self,
心有泠兮。
·
2020-08-25 15:48
力扣日记
【
力扣日记
】501 二叉搜索树中的众数 | 根据字典值排序
题目描述给定一个有相同值的二叉搜索树(BST),找出BST中的所有众数(出现频率最高的元素)。提示:如果众数超过1个,不需考虑输出顺序进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)算法思路NAIVE第一步,用字典来计数classSolution:deffindMode(self,root:TreeNode):ifnotroot:return[]di=collect
心有泠兮。
·
2020-08-25 15:48
力扣日记
【
力扣日记
】746 使用最小花费爬楼梯 | 动态规划
题目描述数组的每个索引做为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为0或1的元素作为初始阶梯。算法思路动态规划。每次可以选择爬一阶或两阶;楼梯数int:dp=[0]*(len(cost))dp[0]=cost[
心有泠兮。
·
2020-08-25 02:09
力扣日记
【
力扣日记
】081 搜索旋转排序数组 II | 二分查找
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。见033搜索旋转排序数组区别是列表是否存在重复元素算法思路没思路纯暴力classSolution:defsearch(self,n,t:int)->int:retur
心有泠兮。
·
2020-08-25 02:09
力扣日记
【
力扣日记
】买卖股票的最佳时机 | 动态规划
文章参考:一个方法团灭六道股票问题——作者:labuladong动态规划DP...121买卖股票的最佳时机给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。算法思路1、穷举计算所有数对的差值。classSolution:defmaxProfit(self,p)->in
心有泠兮。
·
2020-08-25 01:35
力扣日记
【
力扣日记
】035搜索插入位置 | 二分查找
题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。算法思路一般性采用二分查找的方式➡如例left=0;right=len(nums)-1whilelefttarget:#目标值在左半边,收紧右边界right=mid-1elifnums[mid]int:l,r=0,len(n)-1whilelt
心有泠兮。
·
2020-08-24 07:42
力扣日记
【
力扣日记
】042 接雨水 | 双指针 | 正难则反
题目描述给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。感谢Marcos贡献此图。示例:输入:[0,1,0,2,1,0,1,3,2,1,2,1]输出:6算法思路看标签:栈、数组、双指针。想着通过较短双指针*间距来求解,但是就例
心有泠兮。
·
2020-08-17 20:34
力扣日记
【
力扣日记
】112 路径总和 | 深度优先搜索 DFS
题目描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。算法思路很简单,仅需要判断一条从根到叶的路径是否满足目标值。采用递归的方式。结束条件是ifroot.left==Noneandroot.right==None:returnsum-root.val==0完整算法:classSolution:defha
心有泠兮。
·
2020-08-15 21:54
力扣日记
【
力扣日记
】100 相同的树 |深度优先搜索 DFS
题目描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。相同返回True,否则返回False算法思路遍历两个树,两种情况:1、每个元素都相同,直到最后两个树都为空2、某一结点时不同,或到最后只某一棵树为空classSolution:defisSameTree(self,p:TreeNode,q:TreeNode)->bool:def
心有泠兮。
·
2020-08-15 21:54
力扣日记
【
力扣日记
】559 N叉树的最大深度 | DFS
这里先复习一遍二叉树的最大深度。classSolution:defDEEPEST(self,root):ifnotroot:return0returnmax(self.DEEPEST(root.left),self.DEEPEST(root.right))+1题目描述给定一个N叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。"""#DefinitionforaNod
心有泠兮。
·
2020-08-15 21:54
力扣日记
【
力扣日记
】257 二叉树的所有路径 | 递归 | DFS深度优先搜索
题目描述给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。算法思路看到二叉树先想到递归好了。要求给出所有从根到叶子的路径,第一个想到了DFS,所以在其基础上修改。每到一个节点给路径记录s添加val,然后判断当前节点是不是叶子。然后对左右节点递归。全部递归后回溯需要将路径记录s中当前节点值剔除。即可。classSolution:defbinaryTreePaths
心有泠兮。
·
2020-08-15 21:54
力扣日记
【
力扣日记
】405 数字转16进制 | 位运算
题目描述给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用补码运算方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。给定的数确保在32位有符号整数范围内。算法classSolution:deftoHex(self,num:in
心有泠兮。
·
2020-08-07 11:43
力扣日记
【
力扣日记
】152 乘积最大子序列 | 动态规划
题目描述给定一个整数数组nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。算法思路确实是动态规划。且我们不需要维护数组,仅需要维护三个变量fMax=Max=Min=nums[0]很容易理解的是如果数组全是正数如[2,3,4,5],那么最大值就是所有数的乘积120,此时一旦有某数为负如-2,那么最大值就变成了最小值-240,而当前位置的最大值就是-2,最终最大值则还是120如果下
心有泠兮。
·
2020-07-15 17:53
力扣日记
【
力扣日记
】096 不同的二叉搜索树 | 动态规划
题目描述给定一个整数n,求以1…n为节点组成的二叉搜索树有多少种?示例:输入:3输出:5解释:给定n=3,一共有5种不同结构的二叉搜索树:13321\///\\321132//\\2123算法方法一:动态规划直觉本问题可以用动态规划求解。给定一个有序序列1…n,为了根据序列构建一棵二叉搜索树。我们可以遍历每个数字i,将该数字作为树根,1…(i-1)序列将成为左子树,(i+1)…n序列将成为右子树。
心有泠兮。
·
2020-07-15 17:53
力扣日记
【
力扣日记
】120三角形最小路径和 | 动态规划
题目描述给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]说明:如果你可以只使用O(n)的额外空间(n为三角形的总行数)来解决这个问题,那么你的算法会很加分。算法贪心/非题解做题的时候想到了贪心算法说的是选择当前最优的决定。于是:classSolution:defminimumTotal(se
心有泠兮。
·
2020-07-15 13:14
力扣日记
【
力扣日记
】941 有效的山脉数组 | 双指针
题目描述给定一个整数数组A,如果它是有效的山脉数组就返回true,否则返回false。让我们回顾一下,如果A满足下述条件,那么它是一个山脉数组:A.length>=3在0A[i+1]>...>A[A.length-1]算法思路classSolution:defvalidMountainArray(self,A)->bool:iflen(A)>=3:b=A[0]sta=Falseforiinrang
心有泠兮。
·
2020-07-01 10:15
力扣日记
【
力扣日记
】633 平方数之和 | 双指针
题目描述给定一个非负整数c,你要判断是否存在两个整数a和b,使得a2+b2=ca^2+b^2=ca2+b2=c。算法思路第一遍嵌套循环,本就想着可能超时。求超得超。好在之后突然想到优化的方法:双指针双指针classSolution:defjudgeSquareSum(self,c:int)->bool:r=int(c**0.5)+1l=0whilelc:r-=1elifrecbool:l,r=0,
心有泠兮。
·
2020-07-01 10:14
力扣日记
【
力扣日记
】113 路径总和 II | 递归·强化
题目描述给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明:叶子节点是指没有子节点的节点。算法思路二叉树天然适合递归。第一步:结束条件:ifnotroot:return第二步:缩小规模:root.left与root.right替代root递归。第三步:返回值:这次的递归参考【树遍历】的递归方式,不需要返回值,而是在递归的过程中修改外界的列表。————这是模板:
心有泠兮。
·
2020-06-21 21:35
力扣日记
【
力扣日记
】820 单词的压缩编码
题目描述给定一个单词列表,我们将这个列表编码成一个索引字符串S与一个索引列表A。例如,如果这个列表是[“time”,“me”,“bell”],我们就可以将其表示为S=“time#bell#”和indexes=[0,2,5]。对于每一个索引,我们可以通过从字符串S中索引的位置开始读取字符串,直到“#”结束,来恢复我们之前的单词列表。那么成功对给定单词列表进行编码的最小字符串长度是多少呢?!只需要求最
心有泠兮。
·
2020-06-21 21:35
力扣日记
上一页
1
2
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他