大学之道,在明明德,在亲民,在止于至善。werewolf.blog.chinaunix.net
biti-leaf
全部博文(127)
分类:
2010-06-30 19:30:57
#include <stdio.h> #define MAX(x,y) (x>y?x:y) #define MIN(x,y) (x>y?y:x) int max(int *a, int n) { int i; int g_max=0;//全局最大 int suffix_max=1;//作为后缀的最大子序列 int suffix_min=1;//作为后缀的最小负数子序列 int temp; for(i=0; i<n; i++) { if(a[i]>0) { g_max = MAX(suffix_max*a[i], g_max); suffix_max = MAX(suffix_max*a[i], a[i]); suffix_min = MIN(suffix_min*a[i], 1); } else if(a[i]<0) { temp = suffix_max; g_max = MAX(g_max, suffix_min*a[i]); suffix_max = MAX(suffix_min*a[i], 1); suffix_min = MIN(temp*a[i], 1); } } return g_max; } int main() { int a[] = {2,3,1,-4,5,-2}; printf("%d\n", max(a, 6)); return 1; }
上一篇:程序理解和时间分析
下一篇:从无头单链表中删除节点
登录 注册