`

max sub_sequence - c

 
阅读更多

max sub_sequence  - c

 

 

/*
 problem:
 	there is a sequence of number,could be positive or negative,
	find out the sub sequence which has max sum,
 
 solution:
 	loop the sequence,
	use maxendinghere to record sum of elements,when sum < 0, set to 0 and go on summation from next element,
	use maxsofar to record the max sum, each time there is a new maxendinghere, compare with it, and update maxsofar if nessary,
	use a struct seq_max_result to record the result, which include sum / start / end,

efficiency:
	time is O(n), every efficient,
	memory is O(1),
 */
#include <stdio.h>

typedef struct {
	int sum,start,end;
} seq_max_result;

seq_max_result * seq_max(int *arr,int len) {
	// start is the start of every maxendinghere
	int maxsofar = 0,maxendinghere=0,i=0,start=0;
	static seq_max_result result = {0,0,0};
	for(i=0;i<len;i++) {
		if(maxendinghere+*(arr+i) < 0) {
			maxendinghere = 0;
			start = i+1;
		} else {
			maxendinghere += *(arr+i);
		}
		if(maxsofar<maxendinghere) {
			maxsofar = maxendinghere;
			result.start = start;
			result.end = i;
		}
	}
	result.sum = maxsofar;
	return &result;
}

int main() {
	int arr[10] = {-6,2,7,9,-5,6,9,-10,3,5};
	seq_max_result *result = seq_max(arr,10);
	result = seq_max(arr,10);
	printf("[%d , %d]: %d\n",result->start,result->end,result->sum);
}
分享到:
评论

相关推荐

    longest_common_sub-sequence.rar_sub_最长子序列

    在提供的文件"longest_common_sub-sequence.c"中,我们可以看到C语言实现的LCS算法。这个程序首先定义了二维数组LCS来存储中间结果,然后通过两层循环遍历两个字符串的每个字符,根据上述状态转移方程计算LCS数组。...

    maxsum.rar_sub

    总结起来,"maxsum.rar_sub" 和 "Maximum sub sequence sum" 提示我们讨论的最大子序列和问题,这是一个与动态规划和算法设计相关的经典问题。Kadane's Algorithm 是解决这个问题的高效方法,通过遍历序列并决策是否...

    算法与数据结构的片段

    int max_sub_sequence(int data[], int size) { int max = 0; int sum = 0; for (int i = 0; i ; ++i) { sum += data[i]; if (sum &gt; max) { max = sum; } else if (sum ) { sum = 0; } } return max; } `...

    Bochs - The cross platform IA-32 (x86) emulator

    - Determine and select max physical address size automatically at configure time: - 32-bit physical address for 386/486 guests - 36-bit physical address for PSE-36 enabled Pentium guest - 40-bit ...

    Tensor-flow常用函数

    - `tf.sub`: 减法。 - `tf.mul`: 乘法。 - `tf.div`: 除法。 - `tf.mod`: 求模。 - **其他数学运算** - `tf.abs`: 绝对值。 - `tf.sign`: 符号。 - `tf.square`: 平方。 - `tf.round`: 四舍五入。 - `tf....

    STL源码剖析.pdg

    2.2 具备次配置力(sub-allocation)的sgi 空间配置器 047 2.2.1 sgi 标准的空间配置器,std::allocator 047 2.2.2 sgi 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() ...

    STL 源码剖析(侯捷先生译著)

    2.2 具备次配置力(sub-allocation)的SGI 空间配置器 047 2.2.1 SGI 标准的空间配置器,std::allocator 047 2.2.2 SGI 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() ...

    CBASE 1.2.x SQL参考指南1

    - **CREATE SEQUENCE**、**ALTER SEQUENCE**、**DROP SEQUENCE**:创建、修改和删除序列。 - **CREATE FUNCTION**、**DROP FUNCTION**:创建和删除自定义函数。 - **CREATE INDEX**、**DROP INDEX**:创建和删除...

    Cisco 单臂路由配置实验

    Success rate is 100 percent (5/5), round-trip min/avg/max = 64/95/132 ms ``` #### 实验总结 通过本实验的学习,我们了解到单臂路由是一种高效且经济的方式,可以在不增加物理端口数量的情况下实现不同VLAN间...

    数据库整套开发技术支持

    - **日期计算**:使用`DATE_ADD`、`DATE_SUB`等函数进行日期加减运算。 - **单行函数**: - **单行数学函数**:如`ABS`、`CEIL`等。 - **单行字符函数**:如`LENGTH`、`SUBSTR`等。 - **单行转换函数**:如`TO_...

    R语言常用函数

    - **max**, **min**, **pmax**, **pmin**: 最大值与最小值。 - **range**: 获取最大值和最小值。 - **sum**, **prod**: 向量元素的和与积。 - **cumsum**, **cumprod**, **cummax**, **cummin**: 累加、累乘、累计...

    微软内部资料-SQL性能优化3

    Some of the resources have “sub-resources.” The followings are sub-resources displayed by the sp_lock output: Database Lock Sub-Resources: Full Database Lock (default) [BULK-OP-DB] – Bulk Operation...

    datastage function

    3. 日期时间函数:如DATE_ADD、DATE_SUB用于增加或减少日期,DATEDIFF计算两个日期之间的差值,CURRENT_DATE获取当前日期。 4. 正则表达式函数:REGEXP_MATCH、REGEXP_REPLACE利用正则表达式进行复杂的数据匹配和...

    python3.6.5参考手册 chm

    Deprecated functions and types of the C API Deprecated Build Options Removed API and Feature Removals Porting to Python 3.6 Changes in ‘python’ Command Behavior Changes in the Python API ...

    新鲜出炉的PCI-E协议3.0

    Contents OBJECTIVE OF THE SPECIFICATION............................................................................... 23 DOCUMENT ORGANIZATION..........................................................

    Python 序列的方法总结

    序列sequence是python中最基本的数据结构,本文先对序列做一个简单的概括,之后简单讲解下所有序列都能通用的操作方法。 任何序列都可以引用其中的元素(item). 下面的内建函数(built-in function)可用于列表(表,...

    Python常用英文单词

    * seq(sequence):序列 * from:从/来自 * get:获取 * default:默认 * none:没有 * arg:可变元素 * kwargs(keyword args):可变关键字元素 这些单词都是与字典相关的,了解这些单词可以帮助我们更好地操作...

    Python 常用英文单词

    7. `sub`:在正则表达式中,代表子串或替换操作。 五、输入/输出与格式化 1. `input`:从用户那里获取输入。 2. `prompt`:提示用户输入的文本。 3. `ID`:身份标识,可能用于区分不同的对象或用户。 4. `format`:...

    python编程必备英语(全)

    6. **seq (sequence)**: 序列,一种有序的数据结构。 7. **from**: 从…,通常表示来源。 8. **get**: 获取,从字典中检索与给定键相关的值。 9. **default**: 默认,如果没有找到键,则返回的默认值。 10. **none**...

Global site tag (gtag.js) - Google Analytics