2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金,

现在有一位小偷计划从这些房屋中窃取现金,

由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋,

小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额,

给你一个整数数组 nums 表示每间房屋存放的现金金额,

形式上,从左起第 i 间房屋中放有 nums[i] 美元,

另给你一个整数 k ,表示窃贼将会窃取的最少房屋数。

小偷一定要要窃取至少 k 间房屋,返回小偷的 最小 窃取能力。

输入:nums = [2,3,5,9], k = 2。

输出:5。

来自左程云

答案2023-11-01:

go代码用chatgpt编写,不需要修改。

rust、c++、c代码用 灵捷3.5 编写,不需要修改,个人怀疑是调用了chatgpt的api,问了一下,并不是用的chatgpt。

大体步骤如下:

1.如果房屋数量为0,则返回0。

2.如果房屋数量为1,则返回该房屋内的现金金额。

3.如果房屋数量为2,则返回较大金额的房屋的现金金额。

4.初始化变量lastLast为第一个房屋的现金金额,last为第一和第二个房屋中较大金额的现金金额。

5.从第三个房屋开始,循环遍历每个房屋:

  • 计算两种情况下的窃取金额:不窃取当前房屋的金额p1,窃取当前房屋的金额与上上个房屋的金额之和p2。

  • 取两者中较大的金额为当前房屋窃取的最大金额cur。

  • 更新lastLast和last为上一个房屋的现金金额last和当前房屋的现金金额cur。

6.返回最后一个房屋的现金金额last作为小偷的最小窃取能力。

总的时间复杂度为O(n),其中n是房屋的数量。总的额外空间复杂度为O(1),只需要几个变量来存储中间结果。

go完整代码如下:

package main

import (
"fmt"
) func rob(nums []int) int {
n := len(nums)
if n == 0 {
return 0
}
if n == 1 {
return nums[0]
}
if n == 2 {
return max(nums[0], nums[1])
} lastLast := nums[0]
last := max(nums[0], nums[1])
for i := 2; i < n; i++ {
p1 := last
p2 := nums[i] + lastLast
cur := max(p1, p2)
lastLast = last
last = cur
}
return last
} func max(a, b int) int {
if a > b {
return a
}
return b
} func main() {
nums := []int{1, 2, 3, 1}
result := rob(nums)
fmt.Println(result)
}

rust完整代码如下:

fn rob(nums: Vec<i32>) -> i32 {
let n = nums.len();
if n == 1 {
return nums[0];
}
if n == 2 {
return nums[0].max(nums[1]);
}
let mut last_last = nums[0];
let mut last = nums[0].max(nums[1]);
for i in 2..n {
let p1 = last;
let p2 = nums[i] + last_last;
let cur = p1.max(p2);
last_last = last;
last = cur;
}
last
} fn main() {
let nums = vec![1, 2, 3, 1];
let result = rob(nums);
println!("{}", result);
}

c++完整代码如下:

#include <iostream>
#include <vector>
#include <algorithm> int rob(std::vector<int>& nums) {
int n = nums.size();
if (n == 1) {
return nums[0];
}
if (n == 2) {
return std::max(nums[0], nums[1]);
} int lastLast = nums[0];
int last = std::max(nums[0], nums[1]);
for (int i = 2; i < n; i++) {
int p1 = last;
int p2 = nums[i] + lastLast;
int cur = std::max(p1, p2);
lastLast = last;
last = cur;
}
return last;
} int main() {
std::vector<int> nums = { 1, 2, 3, 1 };
int result = rob(nums);
std::cout << "Maximum amount that can be robbed: " << result << std::endl;
return 0;
}

c完整代码如下:

#include <stdio.h>
#include <stdlib.h> int rob(int* nums, int numsSize) {
if (numsSize == 0) {
return 0;
}
if (numsSize == 1) {
return nums[0];
}
if (numsSize == 2) {
return (nums[0] > nums[1]) ? nums[0] : nums[1];
} int lastLast = nums[0];
int last = (nums[0] > nums[1]) ? nums[0] : nums[1];
int cur; for (int i = 2; i < numsSize; i++) {
int p1 = last;
int p2 = nums[i] + lastLast;
cur = (p1 > p2) ? p1 : p2;
lastLast = last;
last = cur;
}
return cur;
} int main() {
int nums[] = { 1, 2, 3, 1 };
int numsSize = sizeof(nums) / sizeof(nums[0]);
int result = rob(nums, numsSize);
printf("%d\n", result); return 0;
}

2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金, 现在有一位小偷计划从这些房屋中窃取现金, 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋, 小的更多相关文章

  1. ArchLinux 2019.11.01安装流程--安装基本系统

    安装前的一些话 本文是参考官方文档ArchLinux的Installation guide(简体中文)加实际操作编写的. 有啥都好说,转载时请注明作者,这是基本素质,也是法律要求 安装是在虚拟机上进行 ...

  2. 17.10.31&11.01

    10.31模拟考试 Prob.1(AC)裸的矩阵幂 Prob.2(WA)(类似括号匹配求合法方案数) 卡特兰数的一个模型运用.可以推出一个式子(推导方法一个erge讲的,一个骚猪讲的) Prob.3( ...

  3. H.264中NAL、Slice与frame意思及相互关系

    H.264中NAL.Slice与frame意思及相互关系 NAL nal_unit_type中的1(非IDR图像的编码条带).2(编码条带数据分割块A).3(编码条带数据分割块B).4(编码条带数据分 ...

  4. 通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离

    一.docker的三个重要概念 1.镜像:打包项目带上环境,即镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的配置参数.镜像 ...

  5. Go语言:编写一个 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL。如果两个 URL 在 10 秒内都未返回结果,返回一个 error。

    问题: 你被要求编写一个叫做 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL.如果两个 URL 在 10 秒内都未返回结果,那么应该返回一个 error ...

  6. 马云18年前制止偷井盖视频走红 2013-05-10 11:00:37 来源: 新快报(广州) 有0人参与 分享到 网易微博 新浪微博 腾讯空间 人人网 有道云笔记 在一次访谈中,即将卸任阿里巴巴CEO的马云自曝了他第一次上电视是在1995年。“我刚开始创

    马云18年前制止偷井盖视频走红 2013-05-10 11:00:37 来源: 新快报(广州) 有0人参与   分享到 网易微博 新浪微博 腾讯空间 人人网 有道云笔记 在一次访谈中,即将卸任阿里巴巴 ...

  7. WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问

    原文:WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问 1,在菜单中访问 弹出菜单的控件 var mi = sender as MenuItem;//菜单条目 MenuItem ...

  8. 智能硬件+App移动新生态【11.01深圳】

    活动概况 时间:2015年11月01日13:30-16:30 地点:深圳腾讯大厦(南山区科技园科技中一路)2楼多功能厅 主办:APICloud.庆科.信鸽 费用:免费 活动背景 智能电视.智能汽车.智 ...

  9. 【Java初探实例篇01】——Java语言基础

    示例系列,将对每节知识辅以实际代码示例,通过代码实际编写,来深入学习和巩固学习的知识点. IDE:intellij IDEA: 语言:Java 本次示例:Java语言基础知识的应用. 创建包day_4 ...

  10. 2017.11.13 在C语言中是否能用函数实现模块化程序设计

    第七章 用函数实现模块化程序设计 (1)为什么要用函数? @function既是函数也是功能.函数就是用来完成一定功能的的(函数就是功能),函数名就是给这个功能起一个名字,一个C程序可由一个主函数和若 ...

随机推荐

  1. c语言代码练习7

    //输出0-100的三倍数字#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int i = 0; int ...

  2. 关于tiptop gp5.2采购模块,价格变更的随笔

    采购价格变更要看具体环节,你可以把他当作是三张表,采购价格表.收货价格表.入库价格表,这些还好处理,如果已抛砖到财务端生成账款再要求改价格就更复杂,会产生更多张表了,改起来也就更复杂. 用apmt91 ...

  3. .netCore 图形验证码,非System.Drawing.Common

    netcore需要跨平台,说白点就是放在windows服务器要能用,放在linux服务器上也能用,甚至macos上. 很多时候需要使用到图形验证码,这就有问题了. 旧方案1.引入包 <Packa ...

  4. Util应用框架Web Api开发环境搭建

    要使用Util应用框架开发项目,首先需要搭建合适的开发环境. 迈出第一步,对于很多.Net新人可能并不简单. 如果你对.Net环境并不熟悉,请尽量按照本文档进行操作. 操作系统 请安装 Windows ...

  5. 《数据结构》王卓老师 p48-p62学习反馈

    跟着青岛大学-王卓老师的视频进行到链队列时,运行链队列代码的时候遇到了两个问题: 1.)Program received signal SIGSEGV Segmentation fault 附代码: ...

  6. 每天5分钟复习OpenStack(六)CPU虚拟化<2>

    OpenStack是 一个IAAS(基础设施即服务)因此免不了会与硬件打交道.下面我介绍下与CPU强关联的一些知识点.1 什么是超配 2 CPU的个数是怎么统计的 3 vCPU的隔离.绑定 1.超配 ...

  7. Windows虚拟机环境下Linux设置固定IP地址

    Linux 设置固定IP地址 安装环境是VMware Workstation Pro 15 安装完linux之后需要做的第一件事就是配置网络,有了网络我们可以下载插件,使用xshell工具连接等等 i ...

  8. 数据结构与算法(LeetCode)第一节:认识复杂度,对数器,二分法与异或运算

    一.认识复杂度 1.评估算法优劣的核心指标: 时间复杂度:当完成了表达式的建立,只要把最高阶项留下即可.低阶项都去掉,高阶项的系数也去掉,记为O(去掉系数的高阶项): ​ 时间复杂度是衡量算法流程的复 ...

  9. cdq分治/整体二分

    cdq分治: 使用场景: 三维偏序问题 优化dp 将动态问题转静态问题 99%题目能离线的情况下cdq可以替代树套树,时空都更优秀 整体二分: 起初用来解决动态区间第K min/max,在最基础的二分 ...

  10. 「Eolink Apikit 教程」API 异常监控-创建 API 监控

    API 监控能够确保 API 的稳定性.如果一个 API 出现故障或崩溃,它可能会导致整个应用程序无法正常工作.这对用户和业务来说可能是灾难性的.通过监控 API,开发团队可以及时发现问题并采取措施来 ...