LeetCode_Maximum Subarray | Maximum Product Subarray
来源:互联网 发布:a站是什么软件 编辑:程序博客网 时间:2024/05/22 01:34
Maximum Subarray
一、题目描述
就是求一个数组的最大子序列
二、思路及代码
首先我们想到暴力破解
public class Solution { public int maxSubArray(int[] nums) { int sum = Integer.MIN_VALUE; for(int i=0; i<nums.length; i++) for(int j=i+1; j<nums.length; j++) sum = Math.min(nums[i]+nums[j], sum); return sum; }}
果然TLE了,于是要找到合适的时间复杂度。所以再寻找时间复杂度小于N平方的。
所以我们想到既然要求最大子序列,那么我们在扫面累加数组元素时,判断之前的元素是否小于0,如果小于0,说明不用累加了,因为会“拖累”后边求和的值。于是演变成了动态规划问题。递推公式就是
public class Solution { public int maxSubArray(int[] nums) { int sum = nums[0], maxSum = nums[0]; for(int i=1; i<nums.length; i++) { if(sum < 0) sum = 0; //判断之前的sum是否可以利用 sum += nums[i]; maxSum = Math.max(sum, maxSum); } return maxSum; }}
Maximum Product Subarray
一、题目描述
二、代码及思路
思路与上道题有所不同,这里要求是求乘积,那么乘积有个最简单的性质:负负得正;
那么如果套用上面那道题的思路,当前最小值如果是负值,如果下一个也是负值,就很可能成为一个很大的正值。所以我们这里需要两个保存当前最小值和最大值的局部变量。
public class Solution { public int maxProduct(int[] nums) { int localMaxProduct = nums[0], localMinProduct = nums[0], maxProduct = nums[0]; for(int i=1; i<nums.length; i++) { int copy_localMinProduct = localMinProduct; localMinProduct = Math.min(Math.min(nums[i]*copy_localMinProduct, nums[i]*localMaxProduct), nums[i]); localMaxProduct = Math.max(Math.max(nums[i]*copy_localMinProduct, nums[i]*localMaxProduct), nums[i]); maxProduct = Math.max(localMaxProduct, maxProduct); } return maxProduct; }}
0 0
- LeetCode_Maximum Subarray | Maximum Product Subarray
- leetcode_Maximum Product Subarray
- leetcode_Maximum Product Subarray
- leetcode_Maximum Product Subarray
- leetCode_Maximum Product Subarray
- Leetcode_Maximum Product Subarray(c++ version)
- Leetcode_maximum-subarray
- Leetcode_Maximum Subarray
- Maximum Product Subarray
- Maximum Product Subarray
- Maximum Product Subarray 【LeetCode】
- [LeetCode] Maximum Product Subarray
- leetcode-Maximum Product Subarray
- Maximum Product Subarray -- LeetCode
- LeetCode-Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- 【LeetCode】Maximum Product Subarray
- 由浅入深理解Activity的诞生
- ASN.1学习笔记
- Vim学习笔记1---基本操作
- ubuntu安装samba实现与windows文件共享
- xcode 学习总结
- LeetCode_Maximum Subarray | Maximum Product Subarray
- Trie树的简单应用
- 2015周赛4
- 轻松写日记---日记软件
- 零基础学C语言 笔记四 Scanf函数清除缓冲区
- 零基础学python-7.5 文本解析
- linux下tcpdump的使用简介
- 【算法】Treap模板和SBT模板
- C++ 浅析 STL 中的 list 容器