- 浏览: 481181 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pyl574069214:
1楼的方法可用
iText操作错误:PdfReader not opened with owner password -
pyl574069214:
谢谢
iText操作错误:PdfReader not opened with owner password -
ggyyso:
解决方法:import java.lang.reflect.F ...
iText操作错误:PdfReader not opened with owner password -
思念-悲伤:
谢了!!!
Exception loading sessions from persistent storage -
u012380013:
加上bos.flush(); 是成功的
Java解压缩zip文件
给定一个数组,求出数组中连续的一些元素使其和的值最大。如果所有元素都为正数,显然整个数组即为所求的。如果所有元素的值为负数,则所求的最大值为0.
这是在编程珠玑上看到的,其时间复杂度由O(n3)减为O(n)了。
public class MaxSum { public static void main(String[] args) { int[] arr = new int[]{31, -41, 59, 26, -53, -58, -97, -93, -23, -84}; MaxSum ms = new MaxSum(); ms.Max(arr); ms.Max2(arr); ms.Max3(arr); int max = ms.Max4(arr, 0, arr.length-1); System.out.println("Max sum is " + max); ms.Max5(arr); } //方法1: 时间复杂度为O(n*n*n) public void Max(int[] arr) { int max = 0; int sum = 0; int left = -1; int right = -1; for(int i=0; i<arr.length; i++) { for(int j=i; j<arr.length; j++) { sum = 0; for(int k=i; k<=j; k++) { sum = sum + arr[k]; } if(sum > max) { left = i; right = j; max = sum; } } } if(right > 0) { System.out.println("Max is from element " + left + "(" + arr[left] + ") to element " + right + "(" + arr[right] + "), max sum is " + max); } else if(right == 0) { System.out.println("Max sum is " + arr[0]); } else { System.out.println("Max sum is 0 ."); } } //方法2:时间复杂度为O(n*n) public void Max2(int[] arr) { int max = 0; int sum = 0; int left = -1; int right = -1; for(int i=0; i<arr.length; i++) { sum = 0; for(int j=i; j<arr.length; j++) { sum = sum + arr[j]; if(sum > max) { left = i; right = j; max = sum; } } } if(right > 0) { System.out.println("Max is from element " + left + "(" + arr[left] + ") to element " + right + "(" + arr[right] + "), max sum is " + max); } else if(right == 0) { System.out.println("Max sum is " + arr[0]); } else { System.out.println("Max sum is 0 ."); } } //方法3:时间复杂度为O(n*n) public void Max3(int[] arr) { int max = 0; int sum = 0; int left = -1; int right = -1; int[] temp = new int[arr.length+1]; temp[0] = 0; for(int i=0; i<arr.length; i++) { temp[i+1] = temp[i] + arr[i]; } for(int i=0; i<arr.length; i++) { for(int j=i; j<temp.length; j++) { sum = temp[j] - temp[i]; if(sum > max) { left = i; right = j-1; max = sum; } } } if(right > 0) { System.out.println("Max is from element " + left + "(" + arr[left] + ") to element " + right + "(" + arr[right] + "), max sum is " + max); } else if(right == 0) { System.out.println("Max sum is " + arr[0]); } else { System.out.println("Max sum is 0 ."); } } //方法4:时间复杂度为O(n*logn) public int Max4(int[] arr, int left, int right) { int sum = 0; int max = 0; int max1 = 0; int max2 = 0; int middle = 0; if(left > right) { return 0; } else if(left == right) { return (arr[left] > 0 ? arr[left] : 0); } middle = (left + right)/2; for(int i=middle; i>=left; i--) { sum = sum + arr[i]; if(sum > max1) { max1 = sum; } } sum=0; for(int i=middle+1; i<=right; i++) { sum = sum + arr[i]; if(sum > max2) { max2 = sum; } } max = max1+max2; int temp1 = Max4(arr, left, middle); int temp2 = Max4(arr, middle+1, right); if(temp1 > max) { max = temp1; } if(temp2 > max) { max = temp2; } return max; } //方法5:时间复杂度为O(n) public void Max5(int[] arr) { int max1 = 0; int max2 = 0; int left = -1; int right = -1; int temp = 0; int count = 0; for(int i=0; i<arr.length; i++) { temp = (max1+arr[i]); if(temp > 0) { count++; if(count == 1) left = i; max1 = temp; if(max1 > max2) { right = i; max2 = max1; } } else { max1 = 0; count = 0; } } if(right > 0) { System.out.println("Max is from element " + left + "(" + arr[left] + ") to element " + right + "(" + arr[right] + "), max sum is " + max2); } else if(right == 0) { System.out.println("Max sum is " + arr[0]); } else { System.out.println("Max sum is 0 ."); } } }
输出为:
Max is from element 2(59) to element 3(26), max sum is 85 Max is from element 2(59) to element 3(26), max sum is 85 Max is from element 2(59) to element 3(26), max sum is 85 Max sum is 85 Max is from element 2(59) to element 3(26), max sum is 85
发表评论
-
java中final关键字的使用
2013-05-31 10:04 5129java中final关键字的使用 1. 用final修饰基 ... -
Java类的初始化
2010-02-01 18:28 1260如下面代码 public class Test1 ... -
Java之Exception与try语句
2010-02-01 18:21 1399代码如下: public class Test1 ... -
java之对象引用static变量
2010-01-18 09:53 1629如下面代码 public class Test { ... -
java之catch语句
2010-01-13 20:16 2046如下面代码: public class Test { ... -
java之static变量
2010-01-13 20:07 1225如下面代码: public class Test { ... -
java之继承
2010-01-13 20:03 1145如下面代码: public class Test { ... -
java内部类
2010-01-13 10:46 1155如下面代码: public class OuterIn ... -
java基础之"=="操作符
2010-01-12 19:44 1151如下: public class Test { ... -
java之动态绑定和静态绑定
2010-01-11 11:22 1394如下面代码: package cn.lifx.test; ... -
java之String变量和“==”操作符(2)
2010-01-11 10:51 1385如下面代码: public class StringTest ... -
java之String变量和“==”操作符(1)
2010-01-06 16:35 1247先看下面的代码,有助于后面的理解。 public cl ... -
汉字截取问题
2010-01-04 15:01 1298如下 public class Test { p ... -
求几个整数的最小公倍数和最大公约数
2009-12-31 16:23 1446下面的方法是用递归解决的。如求几个整数的最小公倍数 ... -
java之final, finally, finalize的区别
2009-12-25 15:43 15601. final 用于声明属性,方法和类,分别表示属性不 ... -
java之抽象类和接口
2009-12-25 11:15 1229如下代码,是使用接口时需要注意的问题。 public int ... -
java之try与finally语句(2)
2009-12-25 11:07 1441接上一篇,跟上一篇代码差不多,就是修改了a的值为double类 ... -
java之try与finally语句
2009-12-24 21:42 1589如下面的代码,结果就不解释了。 public clas ... -
java的静态方法和非静态方法
2009-12-24 11:11 1327如下面的代码 public class Test { ... -
接着看java线程问题
2009-12-18 19:26 1076接上一篇,继续看看java线程问题。当然,下面的程序或者说用法 ...
相关推荐
在一个数组中找出连续元素的最大值,时间复杂度o(n),空间复杂度o(n)
在数据结构的学习中,我们经常会遇到寻找数组中最大元素的问题,这是一个基础且重要的算法问题。在Java编程语言中,解决这个问题的方法多种多样,但这里提到的思路是通过逐步比较数组中的元素来找到最大值。这种方法...
这个问题的目标是找到数组中的一个连续子数组,使得这个子数组的所有元素之和最大。 首先,我们需要理解什么是子数组。在数组中,子数组是由数组中任意两个下标i和j(i )确定的一段连续元素的集合,即原数组的第i...
有1个包含N个整数的数组A,定义1个数组的美丽值为数组中所有不同整数的和。求数组A的所有连续子序列的美丽值之和。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此...
数组是一系列相同类型的数据元素的集合,它们在内存中连续存储,可以通过索引来访问每个元素。在C语言中,数组声明的语法通常为 `类型 名称[大小]`,例如 `int arr[10]` 创建了一个包含10个整数的数组。 要找到数组...
编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为: template <class Type> void maxMin (Type *A,...
这个问题的目标是给定一个整数数组,找出这个数组中的一个连续子数组,使得其元素之和最大。这个问题的一个著名解决方案是Kadane's Algorithm(卡丹算法),它具有线性时间复杂度,即O(n),其中n是数组的长度。 ...
假设我们有一个包含N个元素的数组,滑动平均就是对这个数组中的每一段连续N个元素求平均,然后移动到下一个元素,重复这个过程,直到数组结束。例如,如果N=3,对于数组[1, 2, 3, 4, 5],滑动平均值序列将是(1+2+3)/...
本程序的目的是帮助理解和实现如何在数组中查找特定元素的位置,这对于初学者来说是一个很好的实践课题。在此,我们将深入探讨数组的概念,查找算法以及如何在C++中实现这些概念。 首先,数组是有序的数据集合,...
【Python求解数组连续最大和】 在编程中,经常遇到寻找数组中连续子数组最大和的问题,这是一个经典的算法问题,通常可以通过不同的方法解决。在Python中,有几种常见的策略,包括蛮力法、利用已计算子数组和以及...
数组的索引通常从0开始,因此,一个包含n个元素的数组,其索引范围是0到n-1。数组元素的访问时间复杂度为O(1),因为内存地址可以直接计算。 2. 数组的声明与初始化: 在C语言中,声明一维数组的语法为`类型 名称...
2. **内存管理**:数组中的元素在内存中连续存储,可以通过索引访问。 3. **循环控制**:for循环是遍历数组的标准方式,它允许你从特定的起始位置遍历到结束位置。 4. **条件语句**:if语句用于进行逻辑判断,如判断...
连续最大子数组和问题要求找到一个整数数组中的连续子数组,使得该子数组的和最大。例如,对于数组 [-2, 1, -3, 4, -1, 2, 1, -5, 4],最大的子数组和是 6,对应的子数组为 [4, -1, 2, 1]。 提供的代码实现了一个名...
问题定义:给定一个整数数组 A[1...n],找到一个连续子数组 A[i...j],使得它的和最大,即求解 max(A[i] + A[i+1] + ... + A[j]),其中 1 ≤ i ≤ j ≤ n。 这个问题有多种解决方法,其中最著名的是 Kadane's ...
在本例中,我们需要解决的是一个特殊情况,即数组中元素的正负性不一,目标是找到连续元素之和最大的子序列。这不仅考验编程技巧,也考验算法思维。 在上述PHP实现示例中,我们看到的解决思路是基于一个简单的线性...
这个问题的目标是找到一个数组中的连续子数组,使得这个子数组的元素之和最大。 首先,我们可以使用**暴力枚举**的方法来解决这个问题。这种算法的思想是从数组的第一个元素开始,遍历所有可能的子数组,计算每个子...
最大子数组和是一道经典的算法问题,其目的是在一个数组中找到一个连续的子数组,使得该子数组的和最大。最大子数组和问题可以通过动态规划算法来解决,时间复杂度为O(n),其中n为数组长度。 最大子数组和的具体...