2021-10-28:打家劫舍 II。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额 。力扣213。

答案2021-10-28:

子序列不相邻最大累加和问题。
情况1:[i]只选。
情况2:[i]不选。
情况3:[0~(i-2)]+[i]。
dp[i]取上三种情况的最大值。
0到n-2和1到n-1,根据上面的方法求出来,再取最大值,这个最大值就是需要的返回值。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
nums := []int{1, 2, 3, 4, 5}
ret := rob(nums)
fmt.Println(ret)
} // arr 长度大于等于1
func pickMaxSum(arr []int) int {
n := len(arr)
// dp[i] : arr[0..i]范围上,随意选择,但是,任何两数不能相邻。得到的最大累加和是多少?
dp := make([]int, n)
dp[0] = arr[0]
dp[1] = getMax(arr[0], arr[1])
for i := 2; i < n; i++ {
p1 := arr[i]
p2 := dp[i-1]
p3 := arr[i] + dp[i-2]
dp[i] = getMax(p1, getMax(p2, p3))
}
return dp[n-1]
}
func getMax(a int, b int) int {
if a > b {
return a
} else {
return b
}
} func rob(nums []int) int {
if len(nums) == 0 {
return 0
}
if len(nums) == 1 {
return nums[0]
}
if len(nums) == 2 {
return getMax(nums[0], nums[1])
}
pre2 := nums[0]
pre1 := getMax(nums[0], nums[1])
for i := 2; i < len(nums)-1; i++ {
tmp := getMax(pre1, nums[i]+pre2)
pre2 = pre1
pre1 = tmp
}
ans1 := pre1
pre2 = nums[1]
pre1 = getMax(nums[1], nums[2])
for i := 3; i < len(nums); i++ {
tmp := getMax(pre1, nums[i]+pre2)
pre2 = pre1
pre1 = tmp
}
ans2 := pre1
return getMax(ans1, ans2)
}

执行结果如下:


左神java代码

2021-10-28:打家劫舍 II。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装的更多相关文章

  1. C语言 约瑟夫圈问题:N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。

    样例输入3  输出2 输入100   输出91 代码及分析: #include<stdio.h> int main() { int i,n,N,out,a[1000]; out=i=n=0 ...

  2. java例题_37 有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 3 问最后留下的是原来第几号的那位。

    1 /*37 [程序 37 报数] 2 题目:有 n 个人围成一圈,顺序排号.从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 3 问最后留下的是原来第几号的那位. 4 */ 5 ...

  3. 约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    首先,我最大的学习来源不是百度而是我群友~~在这里表白一波我热爱学习的群友们!然后今天群里突然有人提出了题目的这个问题:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出 ...

  4. 37 有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位.

    题目:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. public class _037NumberOff { public st ...

  5. 代码实现:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; //有n个人围成一圈,顺序排号.从第一个人开始 ...

  6. C++经典题目:有n个人围成一圈,顺序排号,然后数数进行淘汰的解法和一些思考

    问题描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号. 分析: 首先由用户输入人数n,然后对这n个人进行编号[因为如果不编号的话 ...

  7. n人围成一圈报数

    题目:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位 思路:用一个数组存这n个人,里面的初始状态全设为1,表示都还在圈子里面. ...

  8. 20190121-n个人围成一圈,凡报到3的人退出圈子,最后留下的是原来第几号的那位

    1. 报数问题:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位 思路:此题主要问题在于但凡报到3的人退出圈子,而报数的号码与圈子的 ...

  9. java解答:有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号?

    package ttt; import java.util.HashMap; import java.util.Map.Entry; /** * 有17个人围成一圈(编号0~16),从第0号的人开始从 ...

  10. C语言——N个人围成一圈报数淘汰问题

    <一>问题描述: 有17个人围成一圈(编号为0-16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止. 问此人原来的位置是多少号? ...

随机推荐

  1. 前端小白启动开源框架vue-element

    开发java的我按耐不住想学前端的冲动不想看培训机构的视频,决定自学遇到那种"前端知识图谱"的知识架构,看一眼就完了,不能拿来做入门用入门就得是先把工作环境搭起来,能出活就ok了 ...

  2. Java8-聚合操作

    Java聚合操作(Aggregate Operations)是对一堆数据进行处理的新的操作方法,我们知道,如果想对一堆数据进行处理,比如一个List对象中的数据进行处理,传统的操作就是遍历List数据 ...

  3. Android笔记--对话框

    提醒对话框AlertDialog 具体实现: 相关用法: 日期对话框DatePickerDialog DatePicker 具体实现: 使用Dialog选择日期: 时间对话框TimePickerDia ...

  4. Android 音视频 - EGL 源码解析以及 C++ 实现

    OpenGL 是一个跨平台的 API,而不同的操作系统(Windows,Android,IOS)各有自己的屏幕渲染实现.所以 OpenGL 定义了一个中间接口层 EGL(Embedded Graphi ...

  5. Scanner进阶用法

    Scanner进阶用法 判断是否为整数,浮点数 package charpter2; import java.util.Scanner; public class Scanner3 { public ...

  6. 纯CSS3实现多行文本截断

    纯CSS处理多行文本展开和收起,直接上代码和效果图 1 <html> 2 <header> 3 <style> 4 .wrap { 5 position: rela ...

  7. JS - new Function

    Function 在JavaScript当中,除了可以使用function或箭头函数定义方法外,还可以使用new Function的形式动态创建函数,此时与eval()方法类似 创建一个不接收参数的方 ...

  8. ACM-NEFUOJ-P239回文数

    #include<bits/stdc++.h> using namespace std; int n,p[1000],len,p1[1000]; int f() { int i; for( ...

  9. AI工具导航

    .xe-comment-entry img { float: left; display: block; background: rgba(136, 136, 136, 0.15); margin-r ...

  10. ubuntu搭建深度学习环境

    安装vscode 方法一: 依次输入如下命令 1.sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make 2.sudo apt-get updat ...