题目 给你一个数组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:数值累加相关推荐

  1. 数据结构和算法(Java)-张晨光-专题视频课程

    数据结构和算法(Java)-579人已学习 课程介绍         如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...

  2. 02优先队列和索引优先队列-优先队列-数据结构和算法(Java)

    文章目录 1 概述 1.1 需求 1.2 优先队列特点 1.3 优先队列分类 1.4 应用场景 1.5 相关延伸 2 说明 3 索引优先队列 3.1 实现思路 3.2 API设计 3.2 代码实现及简 ...

  3. 数据结构与算法Java(二)——字符串、矩阵压缩、递归、动态规划

    不定期补充.修正.更新:欢迎大家讨论和指正 本文以数据结构(C语言版)第三版 李云清 杨庆红编著为主要参考资料,用Java来实现 数据结构与算法Java(一)--线性表 数据结构与算法Java(二)- ...

  4. 数据结构与算法-java笔记一 更新中

    数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...

  5. 视频教程-内功修炼之数据结构与算法-Java

    内功修炼之数据结构与算法 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能 ...

  6. 二叉查找树(1)-二叉树-数据结构和算法(Java)

    文章目录 1 前言 1.1 二叉查找树定义 1.2 二叉查找树的性质 2 基本实现 2.1 API 2.2 实现代码 2.2.1 数据表示 2.2.2 查找 2.2.3 插入 3 分析 4 有序性相关 ...

  7. 数组【数据结构与算法Java】

    数组[数据结构与算法Java] 数组 数组 略

  8. 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 ...

  9. 数据结构和算法Java实现(韩顺平)

    目录 稀疏数组 队列 数组模拟队列思路 数组模拟环形队列 链表 单链表的翻转 单链表的逆序输出(栈) 双向链表 Jasephu 问题 栈 数组模拟 栈实现计算器 中缀表达式 计算器 逆波兰表达式 (后 ...

最新文章

  1. 听说微软出了个 Windows XP reStart Edition? 重启版?
  2. Android Fragment 解析(下)
  3. 基类成员的public访问权限在派生类中变为_C++ 派生类的构造函数(学习笔记:第7章 06)...
  4. LSM树——放弃读能力换取写能力,将多次修改放在内存中形成有序树再统一写入磁盘...
  5. property_get 与 property_set 的返回值(转载)
  6. dll窗体的创建与调用
  7. c支限界算法语言n皇后问题分,算法(八)-回溯法-N皇后问题
  8. SQLSERVER复制订阅中的数据库版本选择
  9. 人工智能ai 学习_人工智能中强化学习的要点
  10. python查找文件内容_python实现搜索文本文件内容脚本
  11. 为什么开发人员要使用Linux
  12. wincc上位机与1200组态步骤_组态上位机WINCC与PLC通讯连接
  13. 行为型模式——状态模式(十一)
  14. C++ 调用 SWMM模型.swmm5.dll
  15. easychm生成帮助文件时出现的目录导航乱码问题
  16. matlab fisher检验,FISHER线性判别MATLAB实现.doc
  17. 基于JMF录制和播放视频源码
  18. [GXYCTF2019]禁止套娃
  19. Allegro PCB同时走多跟网络线以及颜色设置
  20. VBA实战(09) - 工作簿(WorkBook)

热门文章

  1. ARM安装python模块
  2. 大数据分析职业规划指南
  3. 解决-笔记本安装CentOS 7 后无法连接Wi-Fi
  4. 02 Python的自我介绍(数字、字符串、列表)
  5. c语言题模板大全,考试c语言题库
  6. XMind 8 Update 7下载安装破解
  7. 数据采集卡采样率M Sa/s 与G Sa/s是什么意思
  8. JSP学习---jsp简介和理解jsp的本质
  9. 光子计算机应用领域,光子计算机离我们还有多远?
  10. 浅析 Transformer Stage 在 DataStage 作业中的用法及功能实现