- 博客(61)
- 收藏
- 关注
原创 算法训练营day52,204. 计数质数
爱拉陶斯芬筛法,简称埃氏筛或爱氏筛。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7。
2024-05-10 22:04:25
390
原创 算法训练营day49(补), 单调栈1
/如果nums2[top]值是map的key找到了要的结果。//计算当前下标与栈顶值之差就是要的结果。//nums1值和下标做映射。//小于等于直接入栈。
2024-03-13 21:24:19
342
原创 算法训练营day48,动态规划16
/相差大于1看dp[i + 1][j - 1]是否为true,为true也是回文。// 如果j和i相同,字符串等a是回文,如果j和i之差等于1 ,字符串等aa也是回文。//不相等取左右两边最大值。//左右两边相等加2。
2024-03-11 22:27:46
433
原创 算法训练营day47,动态规划15
/当word1、word2字符串元素不相等,即可以删除word1的元素,也可以删除word2的元素,还可以两个数组元素都删除,因为求最少,所以取三者最小值。//当word1、word2字符串元素不相等,即可以删除或者添加word1的元素,还有替换元素,求最小值。//同样当word1为空需要删word2的全部元素长度为j。//同样当word1为空需要删word2的全部元素长度为j。//当word2为空需要删word1的全部元素长度为i。//当word2为空需要删word1的全部元素长度为i。
2024-03-10 19:41:32
310
原创 算法训练营day46,动态规划14
/本题与求最长公共子序列相似,区别在于,如果s是t的子序列,那么最长公共子序列的长度等于s的长度,否则s不是t的子序列。//如果s为空字符串,则至少有1种,因此初始化为1。
2024-03-10 13:47:56
450
原创 算法训练营day45(补),动态规划13
*本题与求最长重复子序列相似,不同之处在于不要求是连续的了,但要有相对顺序, 即:"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。因此text1[i-1]和 text2[j-1] 相同一样,直接+1,不相同则在dp[i][j-1]与dp[i-1][j]之间取最大值*/// 求最大子数组和就是让nums数组当前值和dp数组上一个值相加,在与nums数组当前比较,取最大值。//最大值初始值为数组第一个数,不能给0。//本质上还是求最长公共子序列。
2024-03-09 22:00:24
429
原创 算法训练营day43(补),动态规划11
/第K次买入后的利润。//第K次不持有的利润。//不持有的利润含有手续费。//买卖股票的最佳2的升级版。//买卖股票的最佳2的升级版。
2024-03-07 22:13:55
352
原创 算法训练营day40(补),动态规划8
for j := 0;j++ { // 遍历物品。for i := 1;i++ { // 遍历背包。w := s[j:i] //截取字符串。
2024-03-05 15:50:17
300
原创 算法训练营day39(补),动态规划7
当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。j++ { // 遍历背包。每次你可以爬至多m (1 <= m < n)个台阶。for i := 0;for i := 1;j++ { // 遍历背包。for j := 1;j++ { // 遍历背包。for i := 1;for i := 1;for i := 1;1 阶 + 1 阶 + 1 阶段。
2024-03-04 18:00:55
336
原创 算法训练营day38(补),动态规划6
/求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]];问背包能背的物品最大价值是多少?
2024-02-29 23:02:13
551
原创 算法训练营day36(补),动态规划4
/ 当前物品weight[i]重量大于背包重量j,此时不能再放物品,他的最大价值就是dp[i-1][j]//否则判断背包减去当前物品weight[i]重量+当前物品价值,和之前价值取最大值。// weight表示物品重量 value表示物品价值, bagweight背包容量。///这里必须倒序,区别二维,因为二维dp保存了i的状态。问背包能背的物品最大价值是多少?
2024-02-26 22:31:10
331
原创 算法训练营day34(补), 动态规划2
/如果在起点或终点出现了障碍,直接返回0。// 行赋初始值为1,有障碍物停止。// 列赋初始值为1,有障碍物停止。// 行赋初始值为1。// 列赋初始值为1。
2024-02-23 21:00:23
1060
原创 算法训练营day33(补),复习二叉树1
/如果前序数组只剩1个,说明只有左子树或者右子树。// 889. 根据前序和后序遍历构造二叉树。// 前序中左右 后序遍历左右中。//前序数组去掉root节点。//后序数组去掉root节点。
2024-02-22 22:50:29
268
原创 算法训练营day33(补),动态规划1
/因为求最小花费,dp[i]取前1个与前2个的最小值。本质上就是斐波那契数列但是用递归法,力扣提交会超时。的台阶开始爬楼梯, 那么初始值0,1都赋值为零。//最高值是 len(cost) + 1。//可以选择从下标为。
2024-02-22 22:46:01
385
原创 算法训练营day31,贪心算法5
/如果当前左边界比结果数组最后一个右边界比小,说明重叠。//如果当前左边界比前一个右边界比小,说明重叠需要删除。count := 0 //移除数量。//按第一位从小到大排序。
2024-02-19 22:24:05
1550
原创 算法训练营day30,贪心算法4
if people[i][0] == people[j][0] { //如果身高相等则按照k从小到大排序。return people[i][0] > people[j][0] //身高由大到小排序。//如果是20元,可以找10元+5元或者3个五元,优先采用10+5方式。//如果最开始就大于5元,肯定无法找零直接返回false。// 如果当前边界比之前边界大,则沿用之前边界。//等于5元直接收下不用找零,five++//如果没有五元找零,直接返回false。//如果是10元,且有5元可以找零。
2024-02-17 10:21:11
1194
原创 算法训练营day29, 贪心算法3
/如油箱剩余量小于零则把下标移动到下一个,同时油箱归零。//如果所有加油站油耗剩余小于零则说明无法跑完一圈返回-1。//如果k还没用完且为奇数,把最小值转为负数,影响最小。//比较当前值和前一个值+1中取二者最大值。sum := 0 //统计所有加油站油耗剩余。index := 0 //出发时加油站的编号。curSum := 0 //统计油箱剩余量。//将数组中负数转为正数。
2024-02-16 22:11:52
723
原创 算法训练营day28(补), 贪心算法2
result := 0 //利润总和。result := 0 //步骤统计。next := 0 //下一个指针。cur := 0 //当前指针。step := 0 //步数。
2024-02-16 19:33:51
791
原创 算法训练营day25(补),回溯5
if i > 0 && numList[i] == numList[i-1] && user[i-1] == false { //过滤重复。if user[numList[i]] { //已用过的数直接跳过。if user[i] { //已用过的数直接跳过。//记录数组每一个元素是否使用过。//记录数组每一个元素是否使用过。//记录数组每一个元素是否使用过。//因为是组合所有元素又要。
2024-02-14 20:02:41
580
原创 算法训练营day24(补),回溯4-2
if i > 0 && numList[i] == numList[i-1] && user[i-1] == false { //过滤重复。sort.Ints(nums) //排序后面做剪枝。//记录数组每一个元素是否使用过。
2024-02-14 15:36:06
359
原创 算法训练营day24补,回溯4-1
path = append(path, str1) // 符合条件的就进入下一层。//一个合法IP最少1*4=4位,最大3*4=12位,超过或小于都不合法。//path有4个元素就可以构成一个IP。//判断ip是否合法。
2024-02-07 22:00:24
265
原创 算法训练营day23(补),回溯3
if i > 0 && candidates[i] == candidates[i-1] && user[i-1] == false { //过滤重复。if candidates[i] > target { //剪枝。if candidates[i] > target { //剪枝。sort.Ints(candidates) //排序后面做剪枝。sort.Ints(candidates) //排序后面做剪枝。//记录数组每一个元素是否使用过。//对字符串进行切割。
2024-02-06 22:36:33
691
原创 算法训练营day22, 回溯2
/当单次集合大小和k值相等,找到本次集合,但path需要一直使用需要用temp临时存储然后赋给result。if sum+i > n { // 剪枝。
2024-02-04 22:09:03
601
原创 算法训练营day21,回溯1
/当单次集合大小和k值相等,找到本次集合,但path需要一直使用需要用temp临时存储然后赋给result。if n-i+1 < k-len(path) { // 剪枝。
2024-02-03 20:41:10
363
原创 算法训练营day20,二叉树9
/同样因为不确定右子树是否还要删除,因此要不断向左遍历,因为是二叉树搜索树,当前节点如果比high 大,当前节点右子树一定比high 大,因此直接舍弃,不用遍历。//因为不确定左子树是否还要删除,因此要不断向右遍历,因为是二叉树搜索树,当前节点如果比low小,当前节点左子树一定比low小,因此直接舍弃,不用遍历。// 中序遍历是左中右,但我们要先取最大值,所以要逆中序遍历,即右中左。//因为是有序数组,让中间节点作为根据节点,然后进行前序遍历中左右。//找到要删除的左子树。
2024-02-01 21:47:09
388
原创 算法训练营day19,二叉树8-2
5.找到要删除的节点,左指针不为空,右指针不为空,这种情况最复杂,需要调整二叉树结构,既可以让左子树继承,也可以让右子树继承。//5.找到要删除的节点,左指针不为空,右指针不为空,让右子树继承。// 3.找到要删除的节点,左指针不为空,右指针为空。//4.找到要删除的节点,左指针为空,右指针不为空。3.找到要删除的节点,左指针不为空,右指针为空。4.找到要删除的节点,左指针为空,右指针不为空。//2.找到要删除的节点是叶子节点。//根据上述分析,第五点让右子树继承写法。//1.未找到要删除的节点。
2024-01-31 22:37:49
604
1
原创 算法训练营day19,二叉树8-1
/如果p,q比root小,说明在左子树,向左移动。// 因为二叉搜索树是有序的可以按val值大小进行移动。//如果p,q比root大,说明在右子树,向右移动。要容易一些,因为二叉搜索树是有序的。// val比root值小向左移动。// val比root值大向右移动。//本题比昨天236。
2024-01-31 22:27:26
290
原创 算法训练营day18, 二叉树7
/如果统计次数大于最大统计,则把result数组清空并把当前值赋给数组result,否则result增加一个值。//如果前一个节点不为空,且当前节点值与上一个节点值差小于result,则把这个差值赋给result。//如果上一个节点值与当前节点值相等,count累计加1,不相等则重新从1计算。//同样也要内部封装一个递归函数。//同样还是要内部创建递归函数。//设置返回数组为空。
2024-01-30 23:03:39
386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人