求数组(元素可为正数、负数、0)的最大子序列和。

int max_sum(int *arr,int len)
{
	assert(arr);
	assert(len > 0);
	int sum=0;
	int key=-INT_MAX;

	for(int i=0; i<len; ++i)
	{
		if(sum <= 0)
			sum=arr[i];
		else
			sum+=arr[i];

		if(sum >= key)
			key=sum;
	}
	return key;
}

时间: 2024-10-09 10:30:18

求数组(元素可为正数、负数、0)的最大子序列和。的相关文章

求数组元素的最大值最小值

这是编程之美上的一个题目: 一般的做法: void main() { int a[5]={78,63,78,67,18}; int min=0,max=0; min=max=a[0]; for(int i=0;i<5;i++) { if(min>a[i]) min=a[i]; if(max<a[i]) max=a[i]; } printf("%d,%d\n",max,min); } 这种方法总共比较了2*N次 如何降低比较次数呢? 我在这里着重记录一下分冶法的做法:

分治递归:求数组元素的最大值,最小值

//分治递归,求数组元素的最大值,最小值 /** * 保存产生的最大值,最小值 * @author Administrator * */ public class Values { private int max; private int min; public Values(int max,int min){ this.max=max; this.min=min; } public int getMax() { return max; } public void setMax(int max)

在iOS中求数组元素中最大数与最小数

之前求数组中某个数中的最大值与最小值.还真一个个比較,后来看到这种方法后,我就醉了 NSArray *testArray = [NSArray arrayWithObjects:@"-2.0", @"2.3", @"3.0", @"4.0", nil]; NSNumber *sum = [testArray valueForKeyPath:@"@sum.floatValue"]; NSNumber *avg

求数组元素出现的次数

源码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <script> var ary =["丁少","王新","丁少"]; ary.sort(); //给数组按字母排序 var res = [];

求数组长度sizeof

当数组当作参数传递时,它就退化成指针了,要求数组长度的话,可以在main函数内部求得 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void fun(int arr[], int len) {     printf("---%d\n", sizeof(arr));     printf("---%d\n", sizeof(arr[0]));    printf("---len = %d

第十六周oj刷题——Problem K: 填空题:类模板---求数组的最大值

Description 类模板---求数组的最大值 找出一个数组中的元素的最大值,数组大小为10.(用类模板来实现) 数组元素类型作为类模板的参数. Input 10个int型数据 10个double型数据 10个char型数据 10gestring型数据 Output 10个int型数据的最大值 10个double型数据的最大值 10个char型数据的最大值 10个string型数据的最大值 Sample Input 1 3 5 7 9 8 6 4 2 0 1.2 3.4 5.66 7.8 9

3205: 数组做函数参数--数组元素求和1--C语言

3205: 数组做函数参数--数组元素求和1--C语言 时间限制: 1 Sec  内存限制: 128 MB提交: 178  解决: 139[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: int sum(int array[ ][4]);//该函数完成对array数组中的所有元素求和排序工作 在以下程序的基础上,完成对sum函数的定义,提交时,只提交sum函数的定义即可. #include <stdio.h > in

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)(解决)

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和.要求时间复杂度为O(n). 输入描述: [重要]第一行为数组的长度N(N>=1) 接下来N行,每行一个数,代表数组的N个元素 输出描述: 最大和的结果 输入例子1: 8 1 -2 3 10 -4 7 2 -5 输出例子1: 18 思路:对输入的数组进行计算, import java.util.Scanner; public class Main { public static void main(String[]

60.编程统计数组a中正数、0、负数的个数

#include<iostream> using namespace std; int main() { int x=0,y=0,z=0; int a[10]; cout<<"please input 10 numbers:"<<endl; for(int i=0;i<10;i++) { cin>>a[i]; } for(int j=0;j<10;j++) { if(a[j]==0) { x++; } } for(int m=

求数组中绝对值最小的元素

给定一个有序数组a(从小到大排列),数组中的数据有正有负,找出这个数组中的绝对值最小的元素.最先到的自然是从头到尾依次遍历数组中的每个元素,找出绝对值最小的元素.这是最简单的方法,不过它并没有用到数组有序这个特性,现在我们来看看有没有更好的方法.题目要求在数组中查找元素,并且此数组有序,那么可以想到用二分法来处理. 首先我们先看一下如果数组中元素全部为正数或者全部为负数的情况: 如果a[0]>0,那么数组中所有元素均为正数,则a[0]为绝对值最小的元素 如果a[len-1]<0,那么数组中所有