leetcood学习笔记-53*-最大子列和
2024-08-29 20:18:23
题目描述:
方法一:O(N)
class Solution(object):
def maxSubArray(self, nums):
sum = 0
max_sub_sum = nums[0]
for num in nums:
sum += num
if sum > max_sub_sum:
max_sub_sum = sum
if sum < 0:
sum = 0
return max_sub_sum
二:O(N)/O(1)
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(1, len(nums)):
nums[i]= nums[i] + max(nums[i-1], 0)
return max(nums)
三:分治法 O(logn) O(logn)
class Solution {
public int maxSubArray(int[] nums) {
if (nums == null || nums.length <= 0)
return 0;
int len = nums.length;
return getInfo(nums,0,len - 1).mSum;
}
class wtevTree{
int lSum;
int rSum;
int iSum;
int mSum; wtevTree(int l, int r, int i, int m){
lSum = l;
rSum = r;
iSum = i;
mSum = m;
}
}
wtevTree pushUp(wtevTree leftT,wtevTree rightT){
int l = Math.max(leftT.lSum,leftT.iSum + rightT.lSum);
int r = Math.max(leftT.rSum + rightT.iSum,rightT.rSum);
int i = leftT.iSum + rightT.iSum;
int m = Math.max(leftT.rSum + rightT.lSum,Math.max(leftT.mSum,rightT.mSum));
return new wtevTree(l,r,i,m);
} wtevTree getInfo(int[] nums,int left,int right){
if(left == right)
return new wtevTree(nums[left],nums[left],nums[left],nums[left]);
int mid = (left + right) >> 1;
wtevTree leftT = getInfo(nums,left,mid);
wtevTree rightT = getInfo(nums,mid + 1,right);
return pushUp(leftT,rightT);
}
}
最新文章
- Java使用Fork/Join框架来并行执行任务
- [Android Pro] listView和GridView的item设置的高度和宽度不起作用
- Eclipse通过jdbc连接oracle数据库
- 【GoLang】GoLang 中 make 与 new的区别
- iOS 实时监听app的网络连接状态
- 使用java连接hive,并执行hive语句详解
- linux中grep使用方法具体解释
- form 表单 设置编码和页面编码
- JMeterPluginsCMD Command Line Tool
- mybatis sql循环的使用
- 刚买个炼狱蝰蛇1800dpi的下完驱动提示没有发现鼠标
- 排序算法之NB三人组
- Python机器学习中文版
- XML详解二XML的解析与创建
- Redis 持久化之RDB和AOF
- hdu 2159FATE(完全背包)
- list 转datatable
- Build Laravel Blog PigJian by PHP7 and Nginx on Ubuntu
- 自定义事件 js
- JavaScript创建对象的4种方法