lintcode :最大子数组
题目:
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
给出数组[−2,2,−3,4,−1,2,1,−5,3]
,符合要求的子数组为[4,−1,2,1]
,其最大和为6
子数组最少包含一个数
要求时间复杂度为O(n)
解题:
通过率37%,一定是暴力,时间复杂度O(N3)刷出来的成绩。。。
动态规划求解,维基百科,
下面程序半个暴力吧,时间复杂度O(n2)
Java程序:
public class Solution {
/**
* @param nums: A list of integers
* @return: A integer indicate the sum of max subarray
*/
public int maxSubArray(ArrayList<Integer> nums) {
// write your code
int maxsum = Integer.MIN_VALUE;
for(int i = 0;i<nums.size();i++){
int sum = 0;
for(int j=i;j<nums.size();j++){
sum+=nums.get(j);
maxsum = Math.max(sum,maxsum);
}
}
return maxsum;
}
}
总耗时: 3227 ms
下面看到一个可以时间复杂度是O(N),但是只能对最大子数组的和大于0的时候才可以,,,但是最大子数组的和是负的,最大的那个负数就是答案了。
Java程序:
public class Solution {
/**
* @param nums: A list of integers
* @return: A integer indicate the sum of max subarray
*/
public int maxSubArray(ArrayList<Integer> nums) {
// write your code
int maxsum = Integer.MIN_VALUE;
int sum = 0;
for(int i = 0;i<nums.size();i++){
if ( sum < 0 ){
sum = 0;
}
sum += nums.get(i);
maxsum = Math.max(maxsum, sum); }
return maxsum;
}
}
总耗时: 1497 ms
Python程序:
class Solution:
"""
@param nums: A list of integers
@return: An integer denote the sum of maximum subarray
"""
def maxSubArray(self, nums):
# write your code here
if nums==None:
return 0
maxsum = -11111110
sum = 0
for i in range(len(nums)):
if sum<0:
sum=0
sum+=nums[i]
maxsum = max(sum,maxsum)
return maxsum
总耗时: 246 ms
动态规划求解:
Python程序:
class Solution:
"""
@param nums: A list of integers
@return: An integer denote the sum of maximum subarray
"""
def maxSubArray(self, nums):
# write your code here
max_ending_here = max_so_far = nums[0]
for x in nums[1:]:
max_ending_here = max(x, max_ending_here + x)
max_so_far = max(max_so_far , max_ending_here)
print x,max_ending_here,max_so_far
return max_so_far
上面的max_ending_here是包括当前位置时候的最大值,mas_so_far现阶段的最大值。这里理解的不是很透彻。。。
如:
nums | -2 | 2 | -3 | 4 | -1 | 2 | 1 | -5 | 3 |
max_ending_here | -2 | 2 | -1 | 4 | 3 | 5 | 6 | 1 | 4 |
max_so_far | -2 | 2 | 2 | 4 | 4 | 5 | 6 | 6 | 6 |
Java程序:
public class Solution {
/**
* @param nums: A list of integers
* @return: A integer indicate the sum of max subarray
*/
public int maxSubArray(ArrayList<Integer> nums) {
// write your code
int max_ending_here = nums.get(0);
int max_so_far = nums.get(0);
for( int i =1 ;i<nums.size(); i++) {
max_ending_here = Math.max( nums.get(i) , nums.get(i) + max_ending_here );
max_so_far = Math.max( max_so_far, max_ending_here);
}
return max_so_far; }
}
lintcode :最大子数组的更多相关文章
- lintcode 最大子数组III
题目描述 给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大.每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [-1 ...
- lintcode:最大子数组差
题目 最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 样例 给出数组[1, 2, -3, 1], ...
- lintcode:最大子数组II
题目 最大子数组 II 给定一个整数数组,找出两个不重叠子数组使得它们的和最大. 每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 样例 给出数组[1, 3, -1, 2, -1, 2], ...
- 最大子数组(LintCode)
最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 注意 子数 ...
- lincode.41 最大子数组
最大子数组 描述 笔记 数据 评测 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 注意事项 子数组最少包含一个数 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? ...
- lintcode-42-最大子数组 II
42-最大子数组 II 给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大. 每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [1 ...
- LintCode-41.最大子数组
最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 注意事项 子数组最少包含一个数 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2 ...
- lintcode-45-最大子数组差
45-最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 注意事项 子数组最少包含一个数 样例 给出 ...
- C++:最大子数组差
最大子数组差 内存限制:128 MiB 时间限制:1000 ms 题目描述: 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B) ...
随机推荐
- C#主要支持 5 种动态创建对象的方式
C#主要支持 5 种动态创建对象的方式: 1. Type.InvokeMember 2. ContructorInfo.Invoke 3. Activator.CreateInstance(Type) ...
- 【Qt】Qt之自定义界面(右下角冒泡)【转】
简述 网页右下角上经常会出现一些提示性的信息,桌面软件中也比较常见,类似360新闻.QQ消息提示一样! 这种功能用动画实现起来很简单,这节我们暂时使用定时器来实现,后面章节会对动画框架进行详细讲解. ...
- JAVA多线程学习3--线程一些方法
一.通过sleep方法睡眠 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行).该线程不丢失任何监视器的所属权. 二.线程优先级 线程具有优先级,范围为1-10. MAX_PRIORITY线程可以具 ...
- 拥抱ARM妹纸第二季 之 第三次 给我变个月亮,让约会更浪漫!
嗯嗯,效果不错.趁着这个热乎劲,接到俺的LED测试板上试试.呃~~~ 竟然和小LED的效果不一样啊,不一样.不但闪烁而且完全没有调光效果.郁闷内,查查原因呗.看看那里出问题.迅速在PT4115手册里翻 ...
- C++中的struct和class的区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能.struct能包含成员函数吗? 能!struct能继承吗? 能!!stru ...
- ORA-15221: ASM operation requires compatible.asm of 11.2.0.0.0 or higher
昨天在做存储迁移的时候,对ASM磁盘组的东西进行操作时,出现了如标题的错误.经查资料,发现原因如下: 如磁盘组是使用asmca图形化工具创建,则compatible.asm默认设置就已经为11 ...
- Javascript Array.prototype.some()
当我们使用数组时,查找数组中包含某个特殊的项是非常常见的动作.下面例子是一个简单的实现: 01 planets = [ 02 "mercury", 03 " ...
- 【h5-egret】如何快速开发一个小游戏
1.环境搭建 安装教程传送门:http://edn.egret.com/cn/index.php?g=&m=article&a=index&id=207&terms1_ ...
- Javascript实例:求数组中最大、最小值及下标
题目:定义一个数组,并给出7个整数,求该数组中的最大值,及最大值下标,最小值及最小值下标.<script type="text/javascript">//定义一个数组 ...
- LintCode-Kth Prime Number.
Design an algorithm to find the kth number such that the only prime factors are 3, 5, and 7. The eli ...