当前位置: 首页 > news >正文

打家劫舍问题 Python题解

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


本文目录

  • 打家劫舍
    • 题目描述
    • 题解
  • 打家劫舍 II
    • 题目描述
    • 题解
  • 打家劫舍 III
    • 题目描述
    • 题解


打家劫舍

题目描述

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

输入:[2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。偷窃到的最高金额 = 2 + 9 + 1 = 12 。

来源: 198. 打家劫舍 - 力扣 (LeetCode)

题解

动态规划

首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,则由于两间房屋相邻,不能同时偷窃,只能偷窃其中的一间房屋,因此选择其中金额较高的房屋进行偷窃,可以偷窃到最高总金额。

如果房屋数量大于两间,应该如何计算能够偷窃到的最高总金额呢?对于第 k ( k > 2 ) k (k>2) k(k>2) 间房屋,有两个选项:

  1. 偷窃第 k k k 间房屋,那么就不能偷窃第 k − 1 k−1 k1 间房屋,偷窃总金额为前 k − 2 k−2 k2 间房屋的最高总金额与第 k k k 间房屋的金额之和。
  2. 不偷窃第 k k k 间房屋,偷窃总金额为前 k − 1 k−1 k1 间房屋的最高总金额。

在两个选项中选择偷窃总金额较大的选项,该选项对应的偷窃总金额即为前 k k k 间房屋能偷窃到的最高总金额。

d p [ i ] dp[i] dp[i] 表示前 i i i 间房屋能偷窃到的最高总金额,那么就有如下的状态转移方程:

d p [ i ] = m a x ( d p [ i − 2 ] + n u m s [ i ] , d p [ i − 1 ] ) dp[i] = max(dp[i-2] + nums[i], dp[i-1]) dp[i]=max(dp[i2]+nums[i],dp[i1])

边界条件为:

{ d p [ 0 ] = n u m s [ 0 ] 只有一间房屋,则偷窃该房屋 d p [ 1 ] = m a x ( n u m s [ 0 ] , n u m s [ 1 ] ) 只有两间房屋,选择其中金额较高的房屋进行偷窃 \begin{cases} dp[0] = nums[0] & 只有一间房屋,则偷窃该房屋\\ dp[1] = max(nums[0], nums[1]) & 只有两间房屋,选择其中金额较高的房屋进行偷窃 \end{cases} {dp[0]=nums[0]dp[1]=max(nums[0],nums[1])只有一间房屋,则偷窃该房屋只有两间房屋,选择其中金额较高的房屋进行偷窃

最终的答案即为 d p [ n − 1 ] dp[n−1] dp[n1],其中 n n n 是数组的长度。

class Solution:def rob(self, nums: List[int]) -> int:if not nums:return 0size = len(nums)if size == 1:return nums[0]dp = [0] * sizedp[0] = nums[0]dp[1] = max(nums[0], nums[1])for i in range(2, size):dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])return dp[size - 1]

上述方法使用了数组存储结果。考虑到每间房屋的最高总金额只和该房屋的前两间房屋的最高总金额相关,因此可以使用滚动数组,在每个时刻只需要存储前两间房屋的最高总金额。

class Solution:def rob(self, nums: List[int]) -> int:if not nums:return 0size = len(nums)if size == 1:return nums[0]first, second = nums[0], max(nums[0], nums[1])for i in range(2, size):first, second = second, max(first + nums[i], second)return second

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组长度。只需要对数组遍历一次。
  • 空间复杂度: O ( 1 ) O(1) O(1)。使用滚动数组,可以只存储前两间房屋的最高总金额,而不需要存储整个数组的结果,因此空间复杂度是 O ( 1 ) O(1) O(1)

打家劫舍 II

题目描述

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

示例 1:

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

示例 2:

输入:nums = [1,2,3,1]
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。

示例 3:

输入:nums = [1,2,3]
输出:3

来源: 213. 打家劫舍 II - 力扣 (LeetCode)

题解

动态规划

首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,则由于两间房屋相邻,不能同时偷窃,只能偷窃其中的一间房屋,因此选择其中金额较高的房屋进行偷窃,可以偷窃到最高总金额。

注意到当房屋数量不超过两间时,最多只能偷窃一间房屋,因此不需要考虑首尾相连的问题。如果房屋数量大于两间,就必须考虑首尾相连的问题,第一间房屋和最后一间房屋不能同时偷窃。

如何才能保证第一间房屋和最后一间房屋不同时偷窃呢?如果偷窃了第一间房屋,则不能偷窃最后一间房屋,因此偷窃房屋的范围是第一间房屋到最后第二间房屋;如果偷窃了最后一间房屋,则不能偷窃第一间房屋,因此偷窃房屋的范围是第二间房屋到最后一间房屋。

假设数组 n u m s nums nums 的长度为 n n n。如果不偷窃最后一间房屋,则偷窃房屋的下标范围是 [ 0 , n − 2 ] [0,n−2] [0,n2];如果不偷窃第一间房屋,则偷窃房屋的下标范围是 [ 1 , n − 1 ] [1,n−1] [1,n1]。在确定偷窃房屋的下标范围之后,即可用第 198 题的方法解决。对于两段下标范围分别计算可以偷窃到的最高总金额,其中的最大值即为在 n n n 间房屋中可以偷窃到的最高总金额。

假设偷窃房屋的下标范围是 [ s t a r t , e n d ] [start,end] [start,end],用 d p [ i ] dp[i] dp[i] 表示在下标范围 [ s t a r t , i ] [start,i] [start,i] 内可以偷窃到的最高总金额,那么就有如下的状态转移方程:

d p [ i ] = max ⁡ ( d p [ i − 2 ] + n u m s [ i ] , d p [ i − 1 ] ) dp[i]=\max(dp[i−2]+nums[i],dp[i−1]) dp[i]=max(dp[i2]+nums[i],dp[i1])

边界条件为:

{ d p [ s t a r t ] = n u m s [ s t a r t ] 只有一间房屋,则偷窃该房屋 d p [ s t a r t + 1 ] = max ⁡ ( n u m s [ s t a r t ] , n u m s [ s t a r t + 1 ] ) 只有两间房屋,偷窃其中金额较高的房屋 \begin{cases} dp[start]=nums[start] & 只有一间房屋,则偷窃该房屋 \\ dp[start+1]=\max(nums[start],nums[start+1]) & 只有两间房屋,偷窃其中金额较高的房屋 \end{cases} {dp[start]=nums[start]dp[start+1]=max(nums[start],nums[start+1])只有一间房屋,则偷窃该房屋只有两间房屋,偷窃其中金额较高的房屋

计算得到 d p [ e n d ] dp[end] dp[end] 即为下标范围 [ s t a r t , e n d ] [start,end] [start,end] 内可以偷窃到的最高总金额。

分别取 ( s t a r t , e n d ) = ( 0 , n − 2 ) (start,end)=(0,n−2) (start,end)=(0,n2) ( s t a r t , e n d ) = ( 1 , n − 1 ) (start,end)=(1,n−1) (start,end)=(1,n1) 进行计算,取两个 d p [ e n d ] dp[end] dp[end] 中的最大值,即可得到最终结果。

根据上述思路,可以得到时间复杂度 O ( n ) O(n) O(n) 和空间复杂度 O ( n ) O(n) O(n) 的实现。考虑到每间房屋的最高总金额只和该房屋的前两间房屋的最高总金额相关,因此可以使用滚动数组,在每个时刻只需要存储前两间房屋的最高总金额,将空间复杂度降到 O ( 1 ) O(1) O(1)

class Solution:def rob(self, nums: List[int]) -> int:def robRange(start: int, end: int) -> int:first = nums[start]second = max(nums[start], nums[start + 1])for i in range(start + 2, end + 1):first, second = second, max(first + nums[i], second)return secondlength = len(nums)if length == 1:return nums[0]elif length == 2:return max(nums[0], nums[1])else:return max(robRange(0, length - 2), robRange(1, length - 1))

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组长度。需要对数组遍历两次,计算可以偷窃到的最高总金额。
  • 空间复杂度: O ( 1 ) O(1) O(1)

打家劫舍 III

题目描述

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

示例 1:

img

输入: root = [3,2,3,null,3,null,1]
输出: 7 
解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7

示例 2:

img

输入: root = [3,4,5,1,3,null,1]
输出: 9
解释: 小偷一晚能够盗取的最高金额 4 + 5 = 9

来源: 337. 打家劫舍 III - 力扣 (LeetCode)

题解

动态规划

简化一下这个问题:一棵二叉树,树上的每个点都有对应的权值,每个点有两种状态(选中和不选中),问在不能同时选中有父子关系的点的情况下,能选中的点的最大权值和是多少。

我们可以用 f ( o ) f(o) f(o) 表示选择 o o o 节点的情况下, o o o 节点的子树上被选择的节点的最大权值和; g ( o ) g(o) g(o) 表示不选择 o o o 节点的情况下, o o o 节点的子树上被选择的节点的最大权值和; l l l r r r 代表 o o o 的左右孩子。

  • o o o 被选中时, o o o 的左右孩子都不能被选中,故 o o o 被选中情况下子树上被选中点的最大权值和为 l l l r r r 不被选中的最大权值和相加,即 f ( o ) = g ( l ) + g ( r ) f(o)=g(l)+g(r) f(o)=g(l)+g(r)
  • o o o 不被选中时, o o o 的左右孩子可以被选中,也可以不被选中。对于 o o o 的某个具体的孩子 x x x,它对 o o o 的贡献是 x x x 被选中和不被选中情况下权值和的较大值。故 g ( o ) = m a x { f ( l ) , g ( l ) } + m a x { f ( r ) , g ( r ) } g(o)=max\{f(l),g(l)\}+max\{f(r),g(r)\} g(o)=max{f(l),g(l)}+max{f(r),g(r)}

至此,我们可以用哈希表来存 f f f g g g 的函数值,用深度优先搜索的办法后序遍历这棵二叉树,我们就可以得到每一个节点的 f f f g g g。根节点的 f f f g g g 的最大值就是我们要找的答案。

我们不难给出这样的实现:

class Solution:def rob(self, root: Optional[TreeNode]) -> int:f = {None:0}g = {None:0}def dfs(node):if not node:returndfs(node.left)dfs(node.right)f[node] = node.val + g[node.left] + g[node.right]g[node] = max(f[node.left], g[node.left]) + max(f[node.right], g[node.right])dfs(root)return max(f[root], g[root])

假设二叉树的节点个数为 n n n

我们可以看出,以上的算法对二叉树做了一次后序遍历,时间复杂度是 O ( n ) O(n) O(n);由于递归会使用到栈空间,空间代价是 O ( n ) O(n) O(n),哈希表的空间代价也是 O ( n ) O(n) O(n),故空间复杂度也是 O ( n ) O(n) O(n)

我们可以做一个小小的优化,我们发现无论是 f ( o ) f(o) f(o) 还是 g ( o ) g(o) g(o),他们最终的值只和 f ( l ) f(l) f(l) g ( l ) g(l) g(l) f ( r ) f(r) f(r) g ( r ) g(r) g(r) 有关,所以对于每个节点,我们只关心它的孩子节点们的 f f f g g g 是多少。我们可以设计一个结构,表示某个节点的 f f f g g g 值,在每次递归返回的时候,都把这个点对应的 f f f g g g 返回给上一级调用,这样可以省去哈希表的空间。

代码如下:

class Solution:def rob(self, root: Optional[TreeNode]) -> int:def dfs(node):if not node:return (0, 0)l = dfs(node.left)r = dfs(node.right)selected = node.val + l[1] + r[1]notSelected = max(l) + max(r)return selected, notSelectedans = dfs(root)return max(ans)

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n)。上文中已分析。
  • 空间复杂度: O ( n ) O(n) O(n)。虽然优化过的版本省去了哈希表的空间,但是栈空间的使用代价依旧是 O ( n ) O(n) O(n),故空间复杂度不变。

相关文章:

打家劫舍问题 Python题解

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...

【JavaSE】Java基础语法(十八):接口

文章目录 1. 接口的概述2. 接口的特点3. 接口的成员特点4. 类和接口的关系5. 抽象类和接口的关系 1. 接口的概述 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。Java中接口存在的两个意义 用来定义规范用来做功能的拓展 2. 接口的特点…...

SVD求解两组多维点之间的欧式变换矩阵,及halcon代码实现

之前研究了二维点的仿射变换,用解矩阵的方式求解了两组二维点之间的变换矩阵。 学习了下SVD,看到可以用SVD求解两组多维点之间的欧式变换矩阵,当然也是个最优化问题。 这里的变换只有平移和旋转,没有缩放。 一、先说结论&#…...

常用监控方案 Prometheus + Grafana 简单使用小结

文章目录 前言一、概念1.1 发展1.2 时序数据1.3 Metric 二、Prometheus2.1 架构2.2 配置2.3 查询语言PromQL2.4 Exporter 三、Grafana3.1 数据源3.2 权限3.3 面板可视化3.4 仪表盘 四、实战4.1 监控 Windows/Linux4.2 监控 JVM4.3 监控 MySQL4.4 监控 Springboot API 参考 前言…...

基于长短期神经网络LSTM的飞行轨迹跟踪预测,基于长短期神经网络LSTM的三维路径预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的飞行轨迹跟踪 完整代码: https://download.csdn.net/download/abc991835105/87705046 效果图 结果分析 展望 参考论文 背影 路径追踪预测,对实现自动飞行驾驶拥有重要意义,长短期神经网络是一种改进…...

计算机组成原理-指令系统-指令格式及寻址方式

目录 一、指令的定义 1.1 扩展操作码指令格式 二、指令寻址方式 2.1 顺序寻址 2.2 跳跃寻址 三、 数据寻址 3.1 直接寻址 3.2 间接寻址 3.3 寄存器寻址 ​ 3.4 寄存器间接寻址 3.5 隐含寻址 3.6 立即寻址 3.7 偏移地址 3.7.1 基址寻址 3.7.2 变址寻址 3.7.3 相对寻址…...

【满分】【华为OD机试真题2023B卷 JAVAJS】经典屏保

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 经典屏保 知识点循环迭代编程基础 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: DVD机在视频输出时,为了保护电视显像管,在待机状态会显示“屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹…...

Apache 网页与安全优化

目录 一:Apache网页优化概述 1、概述 2、优化内容 3、gzip介绍 4、Apache的压缩模块 5、mod_ gzip 模块与mod_ deflate 模块 二: 网页压缩 1.检查是否安装 mod_deflate 模块 2. 如果没有安装mod_deflate 模块,重新编译安装 Apache 添…...

Unity的IFilterBuildAssemblies:深入解析与实用案例

Unity IFilterBuildAssemblies Unity IFilterBuildAssemblies是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目时自定义哪些程序集需要被包含在构建中,哪些程序集需要被排除在建之外。这个功能可以帮助开发者更好地控制项目的构建过程&…...

分片架构,Redis Cluster 分析

分片架构解决的问题 通过堆机器,提升读写性能,与存储性能 分片架构设计要点 分片规则 选择Cardinality大的作为分片键,尽可能保证数据分布均匀 常见分片键: 基于主键(业务型数据),基于时间…...

Linux-0.11 文件系统bitmap.c详解

Linux-0.11 文件系统bitmap.c详解 模块简介 该模块包含了两对函数,第一对是和i节点相关的free_inode()和new_inode()。第二对是和逻辑块相关的free_block()和new_block()。 函数详解 free_block void free_block(int dev, int block)该函数的作用是释放设备dev…...

【Linux】基本指令,拥抱Linux的第一步

[Linux]常见指令 Linux基本指令指令的本质ls指令pwd指令cd指令touch指令mkdir指令(重要)rmdir&&rm指令(重要)man指令(重要)cp指令(重要)mv指令(重要)重定向cat指令more指令less指令(重要…...

CTF 2015: Search Engine-fastbin_dup_into_stack

参考: [1]https://gsgx.me/posts/9447-ctf-2015-search-engine-writeup/ [2]https://blog.csdn.net/weixin_38419913/article/details/103238963(掌握利用点,省略各种逆向细节) [3]https://bbs.kanxue.com/thread-267876.htm(逆向调试详解&am…...

DRF之全局异常处理

一、REST framework 提供了异常处理,我们可以自定义异常处理函数 使用方式: from rest_framewoork.views import exception_handerdef custom_exception_handler(exc,context):# 先调用REST framework默认的异常处理方法获得标准错误响应对象response …...

AI创作工具的使用体验报告

下面是AI创作工具的使用体验报告,围绕以下三点展开: 一、工具的使用体验如何? CSDN博客AI创作工具是一款非常易用的工具,操作简单,可以很快地开始创建内容。在使用过程中,我发现它的语言模型很智能&#…...

C++算法模板(转自acwing)

快速排序算法模板 —— 模板题 AcWing 785. 快速排序 void quick_sort(int q[], int l, int r) {if (l > r) return;int i l - 1, j r 1, x q[l r >> 1];while (i < j){do i ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i],…...

阿里云服务器最新优惠价格及最新收费标准(2023更新)

阿里云服务器收费标准分为包年包月和按量付费两种模式&#xff0c;包年包月是一种先付费后使用的计费方式&#xff0c;按量付费是一种先使用后付费的计费方式。选择包年包月的收费模式&#xff0c;用户可以提前预留资源&#xff0c;同时享受更大的价格优惠&#xff0c;帮您更大…...

React实现监听粘贴事件并获取粘贴板中的截图

目录 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件从粘贴板获取截图文件React监听事件 事件监听绑定的事件函数相关扩展 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件 ? 1 2 3 4 5 6 7 8 9 10 11 const pasteImageRef useRef<HTML…...

ISO_IEC_7816-3

介绍 ISO/IEC 7816 是一系列标准&#xff0c;规定了集成电路卡和此类卡的使用 互换。 这些卡是用于在外部世界和卡中的集成电路之间协商的信息交换的识别卡。 作为信息交换的结果&#xff0c;卡传递信息&#xff08;计算结果、存储的数据&#xff09;和/或修改其内容&#xff0…...

学习C#反射(Reflection)

反射提供描述程序集、模块和类型的对象&#xff08;Type 类型&#xff09;。 可以使用反射动态地创建类型的实例&#xff0c;将类型绑定到现有对象&#xff0c;或从现有对象中获取类型&#xff0c;然后调用其方法或访问器字段和属性。 如果代码中使用了特性(Attribute)&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...