程序员面试题精选(43):数组中连续元素相加和最小的元素序列
来源:互联网 发布:韩国淘宝女模特排名 编辑:程序博客网 时间:2024/04/29 17:02
题目描述: 有一个集合{14,56,53,4,-9,34,...n}里面共n个数
里面可以有负数也可以没有
用一个时间复杂度为o(n)的算法找出其中的一个连续串象(53,4,-9) 这样(串里的数字个数任意)
使得这个连续串为所有这样连续串里各个数字相加和最小的一个
代码实现如下(程序没有考虑有多组解的情况)
#include <iostream>
using namespace std;
template<typename T>
int getMinSum(T* a,int n,T* pbegin,T* pend)
{
T min = a[0];
T sum = a[0];
T tempbegin = 0;
*pbegin = 0;
*pend = 0;
for (int i = 1; i < n; i++)
{
if(sum < 0)
sum = sum + a[i];
else
{
tempbegin = i;
sum = a[i];
}
if (sum < min)
{
min = sum;
*pbegin = tempbegin;
*pend = i;
}
}
return min;
}
int main()
{
int a[] = {8, 9, -3 ,-10 ,7 ,0 ,8 ,-12, 9, 8 ,-1 ,-2 ,9};
int begin;
int end;
int sum;
int k = sizeof(a) / sizeof(int);
sum=getMinSum(a,k,&begin,&end);
cout<<"The min sum is "<<sum<<endl;
cout<<"And the begin is "<<begin<<",and the end is "<<end<<endl;
return 0;
}
- 程序员面试题精选(43):数组中连续元素相加和最小的元素序列
- 程序员面试题精选(36):找出数组中唯一的重复元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素[算法]
- 程序员面试题精选(5):查找最小的k个元素
- 面试题81:有序数组中绝对值最小的元素
- 程序员面试题精选100题(05)-查找最小的k个元素
- 程序员面试题精选--(04)查找最小的k个元素
- 程序员面试题精选100题(05)-查找最小的k个元素
- 程序员面试题精选100题(05)-查找最小的k个元素
- 程序员面试题精选100题(05)-查找最小的k个元素
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- [程序员面试题精选100题]5.查找最小的k个元素
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- 程序员面试题精选(26):和为n连续正数序列
- .net b/s 系统在ie7 显示不正常的原因
- 排序总结
- SOA的理解
- C语言常用宏定义技巧
- 随想
- 程序员面试题精选(43):数组中连续元素相加和最小的元素序列
- 嵌入式开发—C语言面试题
- neatbeans用js实现图片预览上传(自动控制图片大小)
- Session实现购物,访问计数器,cookie使用!
- 移植2.6.15.4内核(转)
- 如何进行成功的创业 程序员创业白皮书
- 值得收藏的146条经典民间偏方
- 用带实参的宏名通过“海伦公式”求任意三角形的面积
- 中小企业如何持续成长——融资篇