Algorithms—152.Maximum Product Subarray
来源:互联网 发布:nginx listen 编辑:程序博客网 时间:2024/06/14 15:34
思路:以0分割,拆成非0数组;每个非0数组中,判断有几个负数,如果是偶数个,直接返回,如果不是,则计算2端的乘积直到第一个非负数,比较大小,截取。
public class Solution { public int maxProduct(int[] nums) { List<List<Integer>> totalList=new ArrayList<List<Integer>>(); List<Integer> list=new ArrayList<Integer>(); boolean flag=false; for (int i = 0; i < nums.length; i++) {if (nums[i]!=0) {list.add(nums[i]);}else { flag=true;if (list.size()!=0) {totalList.add(list);}list=new ArrayList<Integer>();}} if (list.size()!=0) {totalList.add(list);} if (totalList.size()==0) {return 0;} int ans=Integer.MIN_VALUE; for (int i = 0; i < totalList.size(); i++) { int f=max(totalList.get(i));if (f>ans) {ans=f;}}if (flag&&ans<0) {return 0;} return ans; } public int max(List<Integer> list){ if (list.size()==1) {return list.get(0);} int s=-1; int e=-1; int sum=0; for (int i = 0; i <list.size(); i++) {if (list.get(i)<0) {if (s<0) {s=i;}else {e=i;}sum++;}} if (e==-1) {e=s;} int ans=1; for (int i = 0; i <list.size(); i++) {ans*=list.get(i);} if (sum%2==0) {return ans;} int left=1; for (int i = 0; i <=s; i++) {left*=list.get(i);} int right=1; for (int i = list.size()-1; i >=e; i--) {right*=list.get(i);} return left>right?(ans/left):(ans/right); }}
耗时:304ms,上游,代码写的比较丑,仅仅表示思路。
0 0
- Algorithms—152.Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- Javascript(一)-01-(概述和Java的区别)
- ios Mantle使用小记
- 智能绑定微信公众号功能是如何实现的
- openwrt U盘热插拔
- WPF中多线程统计拆箱装箱和泛型的执行效率
- Algorithms—152.Maximum Product Subarray
- Java性能优化(4):避免创建重复对象
- Android Fragment 你应该知道的一切
- HTTPS和HTTP的区别
- Javascript(一)-02-(Js和html相结合的方式一二)
- 欢迎使用CSDN-markdown编辑器
- shell变量详解
- perl中ftp操作案例
- 计算机操作系统磁盘调度