最大子段积
来源:互联网 发布:手机和mac照片同步 编辑:程序博客网 时间:2024/05/21 19:21
//动态规划//法一:#include <stdio.h>#include <stdlib.h>#define MAXN 1int min(int a,int b){ return a>b?b:a;}int max(int a,int b){ return a>b?a:b;}//只有一个负数,返回1int findmax(int array[],int n){ int minproudct;//以当前下标为末尾的序列的最小负子序列 int maxproudct;//以当前下标为末尾的序列的最大正子序列 minproudct=1; maxproudct=1; int result=1;//最后结果 for(int i=0;i<=n-1;i++){ if(array[i]>0){ maxproudct*=array[i]; minproudct*=array[i]; } else if(array[i]==0){ maxproudct=1; minproudct=1; } else{ int temp=maxproudct; minproudct=min(minproudct,maxproudct*array[i]); maxproudct=temp*array[i]; } result=max(result,maxproudct); } return result;}int main(){ int array[MAXN]; for(int i=0;i<=MAXN-1;i++) scanf("%d",&array[i]); int max=findmax(array,MAXN); printf("%d",max); return 0;}//法二:/*double helper(double data[], int n){ double ans = data[0]; double localMax = data[0];//当前位置最大数 double localMin = data[0];//当前位置最小数(乘积存在负负得正的问题,即原本很小的负数成了一个负数反而变大了) for(int i=1; i<n; ++i) { double t1 = max(data[i], max(localMax*data[i], localMin*data[i]) ); double t2 = min(data[i], min(localMax*data[i], localMin*data[i]) ); localMax = t1; localMin = t2; ans = localMax > ans ? localMax : ans; } return ans;}*/
1 0
- 最大子段积
- 最大子段积
- 最大子段和,最大子段积
- 最大
- 最大
- 最大
- 最大
- 最大
- 最大子段和最大子段积java实现
- 数据结构面试题总结7——数组:最大连续子段和、最大连续子段积
- 最大流-最大利益
- 最大,最小
- 最大流
- 最大似然法
- 最大流
- 道理最大
- 最大乘积
- 最大素数
- 简单dp
- 【华为OJ】超长正整数相加
- LightOJ 1197 Help Hanzo 求区间内素数的个数
- Kafka常用命令
- [ASP.NET MVC 小牛之路]02 - C#知识点提要
- 最大子段积
- 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读
- SQL语句大全
- [ASP.NET MVC 小牛之路]03 - Razor语法
- 事务
- PHP static关键字的用法及注意点
- 性能优化——内存优化(1)
- 【Java集合源码剖析】Vector源码剖析
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject