首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >求数组中最小数路径的递归法

求数组中最小数路径的递归法
EN

Stack Overflow用户
提问于 2015-10-21 12:03:50
回答 1查看 669关注 0票数 2

我有数组[0,1,3,4,1]。使用这个数组,我需要编写一个递归函数,它要么是:

  1. 转到下一个元素,或者
  2. 跳过下一个元素,然后转到后面的元素(只能跳过最多为1个元素)。

条件是它必须是尽可能小的数目。解决这一问题的办法如下:

  • 从0开始
  • 跳过1并转到3
  • 跳过4并转到1
  • 添加未跳过的元素并返回它

我已经从它的基本情况开始了这个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private int play(int[] a, int first, int last) {
    int result = 0;

    // base case
    if (first == last){
        return a[first];
    }
    else{
        //result = play(a,first+1,last);
        //System.out.println(result);
    }
    return result;

}

first = 0last = array_length -1。注意,数组可以有任意数量的元素,所以如果我有数组[0 4 23 566 34 45 555 11 34 35 45 65 55 98 344],最低的总数将是591。

请容忍我,我对这种递归的东西是新的。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 12:32:13

我会这样做,您可以跟踪当前的索引,以及到目前为止,沿着路径的索引的总和(所以求和将不包括我们跳过的数字)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static int play(int[] a, int index, int sum){
    if (index>=a.length) return Integer.MAX_VALUE;  //Path went over last index. Invalid Path. 
    sum += a[index];  //Add on to the sum of the index you are currently on
    if (index == a.length-1){
        return sum;  //If we are at last element, return sum of the path traveled
    }else{
        return Math.min(play(a, index+1, sum), play(a, index+2, sum)); //Continue onto path checking both options
    }
}

测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String args[]) {
    int[] a = new int[]{0, 4, 23, 566, 34, 45, 555, 11, 34, 35, 45, 65, 55, 98, 344};
    System.out.println(play(a, 0, 0));
}

输出:591

希望这能有所帮助。

编辑:好的,删除所有的代码,然后在逻辑上考虑这一点。我认为递归(尤其是路径)的方式是,我派遣个别的小人物,在每次递归之后,我将复制那些小人物,以选择不同的路径。让我们在本例中使用较小的数组[0,1,3,4,1]

我们从一个小男人开始。他从0开始。他有两个选择。第一个选项是转到1,第二个选项是去3。我们需要走这两条路,因为我们不确定前面有什么。这个小个子男人重复自己把一个人送去1,另一个人去3

现在,走到小路上的小个子1还有另外两个选择。他要么去3,要么去4。走到3路上的小个子男人还有另外两个选择。他可以去41。所以他们复制了自己,让小人物们完成所有的选择。我希望这一切在这一点上都有意义。处理小人物复制到不同路径的代码是:play(a, index+1, sum), play(a, index+2, sum))

一个小个子人一旦走到路的尽头会做什么?他必须告诉原来的小家伙这条路有多远。其代码是:if (index == a.length-1){return sum;}

不过,最初的小个子并不在乎这条路。他需要和走另一条路的人比较,看看哪条比较短。这是由Math.Min控制的。只返回两个小个子男人的较短距离。因此,距离越短的小人就会杀死他的克隆人(:p),因为我们不喜欢这条路。最后,所有的小人物都会互相残杀,只剩下一个小个子站着,这是最短的距离。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33268230

复制
相关文章
【数据库报错(未删除任何行,未更新任何行)】
首先查看定义的表格数据类型有无问题,点击表格编辑前100行 如何更改编辑行数:更改编辑行数 这里的允许NULL值为通过输入端输入后,写进数据库是否包含空值 例如,输入端通过注册输入注册名后,若允许NULL值未勾选,则写进表格的为用户名+数据类型除了用户名所占字节剩余用空格进行填充(写入表格中的数据为用户名+若干空格) 若允许NULL值勾选了,则写进表格的即为刚刚进行注册的用户名,其后没有多余空格
magize
2023/07/11
3810
【数据库报错(未删除任何行,未更新任何行)】
获取jqGrid中选择的行的数据
var id=$(‘#gridTable’).jqGrid(‘getGridParam’,'selrow’);
ydymz
2018/09/10
2.5K0
[MySQL] mysql 的行级显式锁定和悲观锁
隐式和显式锁定: 1.innodb是两阶段锁定协议,隐式锁定比如在事务的执行过程中.会进行锁定,锁只有在commit或rollback的时候,才会同时被释放 2.特定的语句进行显式锁定 select ... lock in share mode ; select ... for update,where条件里面的必须是主键,否则会锁整张表 3.需要用在事务中使用,并且两个查询都需要for update才能阻塞住另一个去读,也就是实现写锁,阻塞别的读锁,悲观排他的目的 4.如果不想开启事务,就把autocommit关掉,这样默认就是开启事务了,每次都要commit才行
唯一Chat
2019/09/10
1.2K0
[MySQL] mysql 的行级显式锁定和悲观锁
MySQL SQL更新锁定
版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。
Leshami
2018/12/19
2.5K0
SQL"已更新或者删除的行值要么不能使该行成为唯一行,要么改变了多个行(X行)“解决办法
  这种问题大多是由于没有主键(PK)导致同一张表中存在若干条相同的数据。DBMS存储时,只为其存储一条数据,因为DBMS底层做了优化,以减少数据冗余。所以删除或更新一条重复数据就牵一发而动全身。
孙晨c
2019/09/10
3.6K0
SQL"已更新或者删除的行值要么不能使该行成为唯一行,要么改变了多个行(X行)“解决办法
css选择器选择奇数行或偶数行
:nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型。
蓓蕾心晴
2022/12/06
2.4K0
MySQL的行转列
所谓的行转列操作,就是将一个表的行信息转化为列信息,说着可能比较笼统,这里先举个例子,如下:
AsiaYe
2019/11/06
13.2K0
Python-科学计算-pandas-11-df获取特定行或者列
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 pandas:0.19.2
zishendianxia
2020/06/16
2.1K0
mysql行转列
目录 1 mysql行转列 1 mysql行转列 SELECT t.shsexssjhylydm ,count( 1 ) count FROM ( select REGEXP_SUBSTR(SHSEXSSJHYLYDM, '[^,]+', 1, L) AS SHSEXSSJHYLYDM,shsexsbh from TB_YW_SHSEXS_XS xs, (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 1000) WHERE L(+)
一写代码就开心
2022/05/27
3.2K0
SQL 获取纯数值的行
在 MySQL 库中有个 mix 表,它有一个列叫作 v,该列存储了文本和纯数值的内容。部分数据如下:
白日梦想家
2020/11/26
1.6K0
mysql行转列简单例子_mysql行转列、列转行示例[通俗易懂]
最近在开发过程中遇到问题,需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示。
全栈程序员站长
2022/07/01
4.8K0
mysql行转列简单例子_mysql行转列、列转行示例[通俗易懂]
mysql行转列转换
sql 脚本 -- 创建表 学生表 CREATE TABLE `student` ( `stuid` VARCHAR(16) NOT NULL COMMENT '学号', `stunm` VARCHAR(20) NOT NULL COMMENT '学生姓名', PRIMARY KEY (`stuid`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; -- 课程表 CREATE TABLE `courses` ( `cours
皇上得了花柳病
2020/05/04
2K0
Mysql行级锁
锁是计算机协调多个进程或纯线程并发访问某一资源的机制. 在mysql中更是用处多多, 今天就一起看下mysql中的行级锁. 它主要包括行锁, 间隙锁, 临键锁三种. 首先我们先了解几个基础概念.
一个架构师
2022/06/27
3.3K0
Mysql行级锁
【MySQL】InnoDB行格式
首先明确在 innodb 引擎中数据是以页为基本单位读取的,而一个页中又包含多个行数据,那么对应地就会有不同的行格式来存储数据,innodb 中的行格式有四种:compact、redundant、dynamic、compressed。redundant 是 5.0 之前用的行格式,这里就不记录了。
玛卡bug卡
2022/12/18
1.6K0
【MySQL】InnoDB行格式
Mysql 行转列 + json
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137507.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
2.3K0
一行代码获取股票、基金数据,并绘制K线图
大家好,我是老表,今天这篇文章和大家分享一下如何利用Python获取股票、基金数据,并进行可视化,为金融分析&可视化先导篇。
老表
2022/10/31
1.5K0
一行代码获取股票、基金数据,并绘制K线图
mysql行转列函数_mysql行转列,函数GROUP_CONCAT(expr)
SELECT id, product_name FROM `product` WHERE id < 5
全栈程序员站长
2022/08/23
3.1K0
mysql行转列函数_mysql行转列,函数GROUP_CONCAT(expr)
MySQL原理 - InnoDB引擎 - 行记录存储 - Compact 行格式
MySQL 服务器上负责对表中数据的读取和写入工作的部分是存储引擎,比如 InnoDB、MyISAM、Memory 等等,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,目前OLTP业务的表如果是使用 MySQL 一般都会使用 InnoDB 引擎,这也是默认的表引擎。
干货满满张哈希
2021/04/12
1.3K0
MySQL原理 - InnoDB引擎 - 行记录存储 - Compact 行格式
MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式
在上一篇:MySQL原理 - InnoDB引擎 - 行记录存储 - Compact格式 中,我们介绍了什么是 InnoDB 行记录存储以及 Compact 行格式,在这一篇中,我们继续介绍其他三种行格式。
干货满满张哈希
2021/04/12
6540
MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式
MySQL行锁的最佳实践
行锁就是针对数据表中行记录的锁。事务A更新了一行,而这时候事务B也要更新同一行,须等事务A操作完成后才能更新。
JavaEdge
2022/11/30
1.6K0

相似问题

只选择未锁定的行mysql

46

是否选择行并更新相同的行以进行锁定?

21

选择并锁定一行,然后更新

31

MySQL行锁定和更新

12

mysql -更新时锁定行

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文