数据结构与算法(Java) 54:数值累加
题目 给你一个数组arr,和一个整数aim。如果可以任意选择arr中的数字,能不能累加得到aim,返回true或者false。
思路 【暴力递归】类似于子序列问题,遍历数组,当前数值可以选择要它,或者不要它。
【动态规划】设计一张二维dp表,行代表arr中的每一个数的位置,共arr.length + 1行(包含了越界位);若数组中全部元素的加和为sum,那么列代表范围是0~sum的加和。根据basecase可以看出,当sum=aim时,返回true,所以dp中最后一行(越界位)dp[arr.length][aim] = true,同一行的其他位置为false.根据最后一行的信息,从下往上每一行开始计算。根据暴力递归的步骤可以看出,dp[arr.lenght - 1][0]位置依赖于dp[arr.lenght][0]和dp[arr.lenght][0+arr[arr.lenght - 1]],其他同理,注意边界的条件。
package algorithm.section8;public class Sum {public static boolean isSum1(int[] arr, int i, int sum, int aim) {if (i == arr.length) return sum == aim;return isSum1(arr, i + 1, sum, aim) || isSum1(arr, i + 1, sum + arr[i], aim);}public static boolean isSum2(int[] arr, int aim) {int sum = 0;for (int value : arr) sum += value;if (sum < aim) return false;boolean[][] dp = new boolean[arr.length + 1][sum + 1];dp[arr.length][aim] = true;for (int i = dp.length - 2; i >= 0; i--)for (int j = 0; j < dp[0].length; j++) {if (dp[i + 1][j]) dp[i][j] = true;if (j + arr[i] < dp[0].length)dp[i][j] = (dp[i + 1][j] || dp[i + 1][j + arr[i]]);}return dp[0][0];}public static void main(String[] args){int[] arr = {2, 3, 5};int aim = 7;System.out.println(isSum1(arr, 0, 0, aim));System.out.println(isSum2(arr, aim));}
}
数据结构与算法(Java) 54:数值累加相关推荐
- 数据结构和算法(Java)-张晨光-专题视频课程
数据结构和算法(Java)-579人已学习 课程介绍 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...
- 02优先队列和索引优先队列-优先队列-数据结构和算法(Java)
文章目录 1 概述 1.1 需求 1.2 优先队列特点 1.3 优先队列分类 1.4 应用场景 1.5 相关延伸 2 说明 3 索引优先队列 3.1 实现思路 3.2 API设计 3.2 代码实现及简 ...
- 数据结构与算法Java(二)——字符串、矩阵压缩、递归、动态规划
不定期补充.修正.更新:欢迎大家讨论和指正 本文以数据结构(C语言版)第三版 李云清 杨庆红编著为主要参考资料,用Java来实现 数据结构与算法Java(一)--线性表 数据结构与算法Java(二)- ...
- 数据结构与算法-java笔记一 更新中
数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...
- 视频教程-内功修炼之数据结构与算法-Java
内功修炼之数据结构与算法 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能 ...
- 二叉查找树(1)-二叉树-数据结构和算法(Java)
文章目录 1 前言 1.1 二叉查找树定义 1.2 二叉查找树的性质 2 基本实现 2.1 API 2.2 实现代码 2.2.1 数据表示 2.2.2 查找 2.2.3 插入 3 分析 4 有序性相关 ...
- 数组【数据结构与算法Java】
数组[数据结构与算法Java] 数组 数组 略
- 0302Prim算法-最小生成树-图-数据结构和算法(Java)
文章目录 1 Prim算法 1.1 概述 1.1.1 算法描述 1.1.2 数据结构 1.1.3 横切边集合维护 1.2 延时实现 1.2.1 实现代码 1.2.2 性能分析 1.3 即时实现 1.3 ...
- 数据结构和算法Java实现(韩顺平)
目录 稀疏数组 队列 数组模拟队列思路 数组模拟环形队列 链表 单链表的翻转 单链表的逆序输出(栈) 双向链表 Jasephu 问题 栈 数组模拟 栈实现计算器 中缀表达式 计算器 逆波兰表达式 (后 ...
最新文章
- 听说微软出了个 Windows XP reStart Edition? 重启版?
- Android Fragment 解析(下)
- 基类成员的public访问权限在派生类中变为_C++ 派生类的构造函数(学习笔记:第7章 06)...
- LSM树——放弃读能力换取写能力,将多次修改放在内存中形成有序树再统一写入磁盘...
- property_get 与 property_set 的返回值(转载)
- dll窗体的创建与调用
- c支限界算法语言n皇后问题分,算法(八)-回溯法-N皇后问题
- SQLSERVER复制订阅中的数据库版本选择
- 人工智能ai 学习_人工智能中强化学习的要点
- python查找文件内容_python实现搜索文本文件内容脚本
- 为什么开发人员要使用Linux
- wincc上位机与1200组态步骤_组态上位机WINCC与PLC通讯连接
- 行为型模式——状态模式(十一)
- C++ 调用 SWMM模型.swmm5.dll
- easychm生成帮助文件时出现的目录导航乱码问题
- matlab fisher检验,FISHER线性判别MATLAB实现.doc
- 基于JMF录制和播放视频源码
- [GXYCTF2019]禁止套娃
- Allegro PCB同时走多跟网络线以及颜色设置
- VBA实战(09) - 工作簿(WorkBook)