计算之魂 - 1.3
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相关推荐
- 《计算之魂》读书笔记 04
<计算之魂>读书笔记 04 1.4 关于排序的讨论 [1.4.3]针对特殊情况,我们是否还有更好的答案? [附录]为什么排序算法的复杂度不可能小于 O(nlogn)O(nlogn)O(nl ...
- 《计算之魂》--- 思考题0.3 【读书笔记】
<计算之魂>- 思考题0.3 题目如下 分别计算一下1946年的 ENIAC 和如今的 华为P30 在一度电的功耗下,能完成多少次计算. ENIAC 根据资料得知 ENIAC每秒计算500 ...
- 《计算之魂》读书笔记
计算之魂(吴军) 引子 计算的本质--从机械到电子 第 1 章 毫厘千里之差--大O概念 1.1 算法的规范化和量化度量 软件为什么从计算机科学中分离出来? 最初计算机是用于计算,而拥有了计算的基础功 ...
- 《计算之魂》阅读笔记 02
<计算之魂>阅读笔记 02 1.3 怎样寻找最好的算法 例题 1.3 方法一:三重循环 方法二:二重循环 方法三:分而治之 方法四:正反扫描 [思考题 1.3.1] [思考题 1.3.2] ...
- 计算之魂 寻找最好的算法
寻找最好的算法 1. 实例 以总和最大区间问题为例: 给定一个实数序列,设计一个最有效的算法,找到一个总和最大的区间 暴力解法1:O(n3),暴力枚举左边界和右边界需要O(n2),计算边界内的和需要O ...
- [datawhale202208]计算之魂共读:怎样寻找最好的算法
结论速递 本次通过了解总和最大区间问题(即最大子序和)的四种时间复杂度的求解方法,直观地了解了算法复杂度和最优算法的关系. 同时,了解了对优化算法复杂度的判断包含三个内容:对问题边界的认知,对无用功的 ...
- 《计算之魂》Task2:怎样寻找最好的算法
<计算之魂>Task2 1. 问题描述 2. 解决方法 2.1 方法1:三重循环 2.2 方法2:两重循环 2.3 方法3:分治算法 2.4 方法4:正.反两遍扫描 2.4.1 通常情况下 ...
- 《计算之魂》读书笔记 01
<计算之魂>阅读笔记 01 目录 <计算之魂>阅读笔记 01 第1章 - 前言 1.1 算法的规范化和量化度量 [思考题 1.1] 1.2 大数和数量级的概念 [思考题 1.2 ...
- [datawhale202208]计算之魂共读:算法规范化,大数和数量级的概念
结论速递 本次阅读了1.1及1.2章节. 1.1章节首先介绍计算机的软硬件分离历史,引出了程序算法独立存在的价值.并介绍了提出将算法进行量化度量的高德纳的五件闻名于世的事,强调了算法量化的重要性. 1 ...
- 计算之魂-计算的本质是机械运动
阅读吴军老师的新书 <计算之魂>,碰到有意思的内容,会在此做一个记录 计算的本质是机械运动 今天的电子计算机可以被理解成由很多能够被控制的开关构成,这些开关的运动和计算过程是对应的.也就是 ...
最新文章
- mysql5.0 Using a password on the command line interface can be insecure.最简单的解决办法
- FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)
- web前端项目--用hbuilder调试app项目
- Firefox XUL
- 【JSP】jsp报错:Syntax error, insert } to complete MethodBody
- 回溯法2——和尚挑水
- NGUI无限滚动列表实现滑动条
- android iphone字体,ios字体适配的三种实现方法
- 【嵌入式 · 单片机】一文带你搞懂电机驱动模块
- intel服务器芯片组C,Intel C232芯片组 华硕P10S-C售2399元
- jqwidgets API
- vlookup函数和vlookup函数与数据有效性
- oracle SQL update一次性修改多个字段,数据来源于另一张表
- ue4学习日记4(植被,光照,光束遮挡,天空球)
- 共同父域下的单点登录
- Redhat_rhel_linux镜像下载,持续更新......
- Matlab 自编雅可比矩阵 (jacobi) 函数与官方的Jacobian matrix(雅可比矩阵)函数对比及创新
- Caffe2 Synchronous SGD
- 关于接入达达开发者文档的一些问题
- Jira-使用docker安装jira(支持最新版本)
热门文章
- 清华大学计算机系张晨毕业院校,2020清华特奖入围名单公布:电子系学霸两篇顶会一作,2名计算机女生入选...
- JS控制 textarea多行文本框HTML标签根据内容自适应高度
- C# WinForm制作电子琴键盘
- 最新微信小程序选题推荐-高校学生事务考试通知管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】
- 登录页面自动刷新验证码,并校验输入验证码和后台生成的验证码是否一致
- 操作系统:操作系统概论
- PHP根据身份证号码验证、获取星座、生肖和性别函数
- git报错:refusing to merge unrelated histories
- [hackinglab] 逗比验证码第二期
- eclipse怎么取消界面显现的竖线和显现行数