1.3 思考题
Q1:给定一个实数序列,设计一个最有效的算法,找到一个总和最大的区间。

@Testpublic void test1(){double[] nums = {1.5, -12.3, 3.2, -5.5, 23.2, 3.2, -1.4, -12.2, 34.2, 5.4, -7.8, 1.1, -4.9};//区间值double sum_max = 0;//最大值double max = 0;//左边界int left = 0;//有边界int right = 0;//第一个大于的位置int p = 0;for (int i = 0; i < nums.length; i++) {if(nums[i] < 0){//小于零跳过break;}//第一个大于0的位置p = i;for (int q = p; q < nums.length; q++) {sum_max += nums[q];if(sum_max > max){max = sum_max;right = q;left = p;}if(sum_max < 0){sum_max = 0;p = q+1;}}}System.out.println("left="+left+",right="+right);}

Q2:在一个数组中寻找一个区间,使得区间内的数字之和等于某个事先给定的数字。

 @Testpublic void test2(){int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};int sum = -3;System.out.println("和值为:"+sum);for (int i = 0; i < nums.length; i++) {int tmp = 0;for (int j = i; j < nums.length; j++) {tmp += nums[j];if(tmp == sum){System.out.println("存在,数组区间["+i+","+j+"]");}}}}

Q3:求二维矩阵的最大和子矩阵

在一个二维矩阵中,寻找一个矩形的区域,使其中的数字之和达到最大值。

@Testpublic void test3(){int[][] matrix  = {{1,2,-3},{3,4,-5},{-5,-6,-7}};int n = 3;System.out.println(sum(matrix, n));}public int sum(int[][] mat, int n) {int[] temp = new int[n];for(int i = 0;i < n ;i++)temp[i] = 0;int max = 0;for(int i  = 0;i<n;i++){temp = mat[i];max = (maxRow(temp,n) > max )? maxRow(temp,n) : max;for(int j = i+1;j<n;j++){for(int k = 0;k<n;k++){temp[k] += mat[j][k];}max = (maxRow(temp,n)>max) ? maxRow(temp,n) : max;}}return max;}public  int maxRow(int[] arr,int n){int sum = 0;int max = 0;for(int i = 0;i < n;i++){sum += arr[i];if(sum < 0) sum=0;if(sum > max ) max = sum;}return max;}

计算之魂 - 1.3相关推荐

  1. 《计算之魂》读书笔记 04

    <计算之魂>读书笔记 04 1.4 关于排序的讨论 [1.4.3]针对特殊情况,我们是否还有更好的答案? [附录]为什么排序算法的复杂度不可能小于 O(nlogn)O(nlogn)O(nl ...

  2. 《计算之魂》--- 思考题0.3 【读书笔记】

    <计算之魂>- 思考题0.3 题目如下 分别计算一下1946年的 ENIAC 和如今的 华为P30 在一度电的功耗下,能完成多少次计算. ENIAC 根据资料得知 ENIAC每秒计算500 ...

  3. 《计算之魂》读书笔记

    计算之魂(吴军) 引子 计算的本质--从机械到电子 第 1 章 毫厘千里之差--大O概念 1.1 算法的规范化和量化度量 软件为什么从计算机科学中分离出来? 最初计算机是用于计算,而拥有了计算的基础功 ...

  4. 《计算之魂》阅读笔记 02

    <计算之魂>阅读笔记 02 1.3 怎样寻找最好的算法 例题 1.3 方法一:三重循环 方法二:二重循环 方法三:分而治之 方法四:正反扫描 [思考题 1.3.1] [思考题 1.3.2] ...

  5. 计算之魂 寻找最好的算法

    寻找最好的算法 1. 实例 以总和最大区间问题为例: 给定一个实数序列,设计一个最有效的算法,找到一个总和最大的区间 暴力解法1:O(n3),暴力枚举左边界和右边界需要O(n2),计算边界内的和需要O ...

  6. [datawhale202208]计算之魂共读:怎样寻找最好的算法

    结论速递 本次通过了解总和最大区间问题(即最大子序和)的四种时间复杂度的求解方法,直观地了解了算法复杂度和最优算法的关系. 同时,了解了对优化算法复杂度的判断包含三个内容:对问题边界的认知,对无用功的 ...

  7. 《计算之魂》Task2:怎样寻找最好的算法

    <计算之魂>Task2 1. 问题描述 2. 解决方法 2.1 方法1:三重循环 2.2 方法2:两重循环 2.3 方法3:分治算法 2.4 方法4:正.反两遍扫描 2.4.1 通常情况下 ...

  8. 《计算之魂》读书笔记 01

    <计算之魂>阅读笔记 01 目录 <计算之魂>阅读笔记 01 第1章 - 前言 1.1 算法的规范化和量化度量 [思考题 1.1] 1.2 大数和数量级的概念 [思考题 1.2 ...

  9. [datawhale202208]计算之魂共读:算法规范化,大数和数量级的概念

    结论速递 本次阅读了1.1及1.2章节. 1.1章节首先介绍计算机的软硬件分离历史,引出了程序算法独立存在的价值.并介绍了提出将算法进行量化度量的高德纳的五件闻名于世的事,强调了算法量化的重要性. 1 ...

  10. 计算之魂-计算的本质是机械运动

    阅读吴军老师的新书 <计算之魂>,碰到有意思的内容,会在此做一个记录 计算的本质是机械运动 今天的电子计算机可以被理解成由很多能够被控制的开关构成,这些开关的运动和计算过程是对应的.也就是 ...

最新文章

  1. mysql5.0 Using a password on the command line interface can be insecure.最简单的解决办法
  2. FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)
  3. web前端项目--用hbuilder调试app项目
  4. Firefox XUL
  5. 【JSP】jsp报错:Syntax error, insert } to complete MethodBody
  6. 回溯法2——和尚挑水
  7. NGUI无限滚动列表实现滑动条
  8. android iphone字体,ios字体适配的三种实现方法
  9. 【嵌入式 · 单片机】一文带你搞懂电机驱动模块
  10. intel服务器芯片组C,Intel C232芯片组 华硕P10S-C售2399元
  11. jqwidgets API
  12. vlookup函数和vlookup函数与数据有效性
  13. oracle SQL update一次性修改多个字段,数据来源于另一张表
  14. ue4学习日记4(植被,光照,光束遮挡,天空球)
  15. 共同父域下的单点登录
  16. Redhat_rhel_linux镜像下载,持续更新......
  17. Matlab 自编雅可比矩阵 (jacobi) 函数与官方的Jacobian matrix(雅可比矩阵)函数对比及创新
  18. Caffe2 Synchronous SGD
  19. 关于接入达达开发者文档的一些问题
  20. Jira-使用docker安装jira(支持最新版本)

热门文章

  1. 清华大学计算机系张晨毕业院校,2020清华特奖入围名单公布:电子系学霸两篇顶会一作,2名计算机女生入选...
  2. JS控制 textarea多行文本框HTML标签根据内容自适应高度
  3. C# WinForm制作电子琴键盘
  4. 最新微信小程序选题推荐-高校学生事务考试通知管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】
  5. 登录页面自动刷新验证码,并校验输入验证码和后台生成的验证码是否一致
  6. 操作系统:操作系统概论
  7. PHP根据身份证号码验证、获取星座、生肖和性别函数
  8. git报错:refusing to merge unrelated histories
  9. [hackinglab] 逗比验证码第二期
  10. eclipse怎么取消界面显现的竖线和显现行数