【代码随想录】算法训练计划48

news2024/12/24 10:28:01

dp

1、198. 打家劫舍

题目:
输入:[2,7,9,3,1]
输出:12
偷窃到的最高金额 = 2 + 9 + 1 = 12 。

思路:
  • 只有两种情况,递推公式就好说了,dp[i]永远都是题意,就是当前偷到的最大金额
func rob(nums []int) int {
    // dp,一刷
    dp := make([]int, len(nums)+1)
    dp[1] = nums[0]
    for i:=2; i<=len(nums); i++ {
        dp[i] = max(dp[i-1], dp[i-2]+nums[i-1])
    }
    return dp[len(nums)]
}
func max(a, b int) int {if a>b {return a}; return b}

2、213. 打家劫舍 II

题目:
输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

思路:
  • 害,这次是围了个圈圈,就是说明了写两种情况,避免即选择了第一个又选择了最后一个
func rob(nums []int) int {
    if len(nums) <= 1 {
        return djjs2(nums)
    }
    res1 := djjs2(nums[:len(nums)-1])
    res2 := djjs2(nums[1:])
    return max(res1, res2)
}
func djjs2(nums []int) int {
    switch len(nums) {
        case 0: return 0
        case 1: return nums[0]
    }
    dp := make([]int, len(nums)+1)
    dp[1] = nums[0]
    for i:=2; i<=len(nums); i++ {
        dp[i] = max(dp[i-1], dp[i-2]+nums[i-1])
    }
    return dp[len(nums)]
}
func max(a,b int) int {if a>b {return a}; return b}

3、337. 打家劫舍 III

题目:

在这里插入图片描述

思路:
  • 看注释
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func rob(root *TreeNode) int {
    // dp 这个确实有一行不好想,需要画图
    res := robTree(root)
    return max(res[0], res[1]) 
}
func max(a, b int) int {if a>b {return a}; return b}
func robTree(node *TreeNode) []int {
    if node == nil {
        return []int{0,0}
    }
    left := robTree(node.Left)
    right := robTree(node.Right)
    // 0不偷,1偷
    robNode := node.Val + left[0] + right[0] // 当前偷,就要加左右孩子的不偷
    notRobNode := max(left[0], left[1])+max(right[0], right[1]) // 当前不偷,前一个可以偷也可以不偷,+最大的
    return []int{notRobNode, robNode}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1303733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS自定义抽奖转盘开发(ArkTS)

介绍 本篇 Codelab 是基于画布组件、显式动画&#xff0c;实现的一个自定义抽奖圆形转盘。包含如下功能&#xff1a; 1. 通过画布组件 Canvas&#xff0c;画出抽奖圆形转盘。 2. 通过显式动画启动抽奖功能。 3. 通过自定义弹窗弹出抽中的奖品。 相关概念 ● Stack组件…

制作一个RISC-V的操作系统五-RISC-V汇编语言编程一

文章目录 RISC-V汇编语言入门汇编语言概念简介 汇编语言语法介绍&#xff08;GNU版本&#xff09; RISC-V汇编语言入门 汇编语言概念简介 高级&#xff1a;可以理解就是更贴近人的理解 低级&#xff1a;可以理解就是更贴近机器的 难移植&#xff1a;汇编指令基本上和机器指令…

线程安全的哈希表ConcurrentHashMap

1. HashTable 不推荐使用&#xff0c;无脑给各种方法加锁 2.ConcurrentHashMap 多线程下推荐使用 锁粒度控制 HashTable直接在方法上加synchronized&#xff0c;相当于对哈希表对象加锁&#xff0c;一个哈希表只有一把锁。多线程环境下&#xff0c;无论线程如何操作哈希表…

医疗设备智慧管理助力医院提质增效,阿基米德amp;健康界实践分享

近日&#xff0c;苏州阿基米德网络科技有限公司与医疗领域头部级媒体健康界&#xff0c;联合举办“数智为擎 提质增效——医学装备智慧管理创新发展论坛”的直播活动。 直播现场&#xff0c;来自上海交通大学医学院附属同仁医院、中华医学会航海医学分会、苏州阿基米德的专家们…

循序字符中插入数据(链表)

有一串已经从小到大排好序的数 2 3 5 8 9 10 18 26 32。现需要往这串数中插入 6 使其得 到的新序列仍符合从小到大排列。&#xff08;使用链表&#xff09;

Python:核心知识点整理大全14-笔记

目录 ​编辑 7.2.2 让用户选择何时退出 parrot.py 7.2.3 使用标志 7.2.4 使用 break 退出循环 cities.py 7.2.5 在循环中使用 continue counting.py 7.2.6 避免无限循环 counting.py 7.3 使用 while 循环来处理列表和字典 7.3.1 在列表之间移动元素 confirmed_user…

查询mysql服务器当前时区设置、session当前时区设置

使用命令SELECT global.time_zone;可以查询mysql服务器的当前时区设置&#xff0c;例如&#xff1a; 使用命令SELECT session.time_zone;可以查询session的当前时区设置&#xff0c;例如&#xff1a;

2023年全国职业院校技能大赛信息安全管理与评估赛项正式赛(模块一)GZ032

全国职业院校技能大赛高等职业教育组 信息安全管理与评估 任务书 模块一 网络平台搭建与设备安全防护 极安云科专注技能竞赛&#xff0c;包含网络建设与运维和信息安全管理与评估两大赛项&#xff0c;及各大CTF&#xff0c;基于两大赛项提供全面的系统性培训&#xff0c;拥…

Linux常用命令---- test 命令

文章目录 基本语法文件测试检查文件是否存在检查文件是否是目录检查文件是否为空检查文件是否可读、可写或可执行 字符串测试检查字符串是否为空检查字符串是否相等检查字符串是否不相等 数字测试检查数字是否相等检查数字是否大于或小于 在Linux操作系统中&#xff0c;test命令…

59.计算机网络笔记

以上仅供参考&#xff0c;不一定对的&#xff0c;毕竟网络又不是我的学习方向。 一、路由器、交换机、网关。 交换机只会关心数据包的mac地址&#xff0c;不关心数据包的ip地址。 tcp/ip协议规定&#xff0c;不同子网之间是不可以直接通信的&#xff0c;如果要通信需要通过网关…

手动搭建koa+ts项目框架(日志篇)

文章目录 前言一、安装koa-logger二、引入koa-logger并使用总结如有启发&#xff0c;可点赞收藏哟~ 前言 本文基于手动搭建koats项目框架&#xff08;路由篇&#xff09;新增日志记录 一、安装koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

大数据可视化推荐项目——基于Python/Django的电影评论可视化分析推荐系统的设计与实现

大数据可视化推荐项目——基于Python/Django的电影评论可视化分析推荐系统的设计与实现 技术栈&#xff1a;大数据爬虫/机器学习算法/数据分析与挖掘/大数据echarts可视化/Django框架/Mysql 摘要&#xff1a;本文介绍了一个基于大数据可视化的电影评论分析推荐系统&#xff0…

Clickhouse RoaringBitmap

https://blog.csdn.net/penriver/article/details/119736050 https://juejin.cn/post/7179956435806076988 BitMap适合连续密集的正整数存储&#xff0c;对于稀疏的正整数存储&#xff0c;其性能在很多时候是没办法和int数组相比的&#xff0c;尤其是正整数跨度较大的场景&…

python:五种算法(GWO、HHO、WOA、PSO、SSA)求解23个测试函数(python代码)

一、五种算法简介 1、灰狼优化算法GWO 2、哈里斯鹰优化算法HHO 3、鲸鱼优化算法WOA 4、粒子群优化算法PSO 5、麻雀搜索算法SSA 二、5种算法求解23个函数 &#xff08;1&#xff09;23个函数简介 参考文献&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolutionary program…

k8s pod日志写入ELK的具体实现

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 在上一部分&#xff0c;shigen讲到了k8spod的日志写入ELK的三种技术方案&#xff0c;并在最后展示了一下我…

【vtkWidgetRepresentation】第九期 vtkAffineRepresentation2D仿射变换

很高兴在雪易的CSDN遇见你 【vtkWidgetRepresentation】第九期 vtk中的仿射变换 前言 本文分享VTK中的仿射变换&#xff0c;实际结果如下图所示&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进…

数电实验-----74LS192芯片实现任意进制计数器的功能(Quartus II )

目录 一、74LS192芯片介绍 管脚图 ​编辑逻辑图与功能表 工作原理 二、任意进制计数器的实现 1.复位清零法 2.外部反馈置数法 一、74LS192芯片介绍 74LS192是一种二进制同步上升计数器芯片&#xff0c;可以用于数字计数和时序控制等应用。它是TTL逻辑家族中的一员&#x…

文心一言 VS 讯飞星火 VS chatgpt (154)-- 算法导论12.3 1题

一、用go语言&#xff0c;给出 TREE-INSERT 过程的一个递归版本。 文心一言&#xff0c;代码不能运行&#xff1a; 下面是用 Go 语言实现一个递归版本的 TREE-INSERT 过程的代码&#xff1a; package main import "fmt" type TreeNode struct { Val int Lef…

tiktok/抖音x-bogus参数分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 这里只是我分析的分析过程,以及一些重要点的记录…

web服务器之——www服务器的基本配置

目录 一、www简介 1、什么是www 2、www所用的协议 3、WEB服务器 4、主要数据 5、浏览器 二、 网址及HTTP简介 1、HTTP协议请求的工作流程 三、www服务器的类型(静态网站&#xff08;HTML&#xff09;&#xff0c; 动态网站(jsp python,php,perl)) 1、 仅提供…