微软面试题<三>
2013-04-14 22:12
281 查看
题目:
求子数组的最大和
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
因此输出为该子数组的和18。
思路:动态规划,当一段子数组和小于零时,则应该从此位置清零,在开始计算子数组的和。
代码实现如下:
求子数组的最大和
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
因此输出为该子数组的和18。
思路:动态规划,当一段子数组和小于零时,则应该从此位置清零,在开始计算子数组的和。
代码实现如下:
#include <iostream> using namespace std; #define MaxN 1000 int a[MaxN]; int main() { int i,n,temp=0,max=-2147483648; cout<<"请输入数组元素的个数"<<endl; cin>>n; for(i=0;i<n;++i) { cin>>a[i]; temp+=a[i]; if(temp>max) max=temp; if(temp<=0) temp=0; } cout<<"子数组最大值为"<<max<<endl; system("pause"); return 0; }
相关文章推荐
- 微软面试题<四>
- 微软面试题<十>
- 微软面试题<七>
- 微软面试题<二>
- 微软面试题<五>
- 微软面试题<一>
- 常见java考试题与面试题<三>
- Android NDK学习 <三> Android.mk实例和NDK实用技巧
- JavaScript基础知识<三>
- Windows学习笔记5——窗口与消息<三>
- cassandra 学习之旅<三> 内部认证与授权
- <仅是自己做笔记。。。系列x>所有系列题目都来自v_JULY_v前辈的:精选微软等公司经典的算法面试100题
- 微软笔试题<Combination Lock>
- PostgreSQL学习笔记7之函数和操作符<三>
- Java 面试题之反射的应用(如何在List<String> list = new ArrayList<String>();中放入Integer类型的数据)
- 四级核心词汇表<三>
- Volley源码解析<三> Request请求
- 【MySql】使用记录<三>
- Android 源码系列之<三>从安全的角度深入理解BroadcastReceiver(下)
- 原创: Oracle的远程数据库的连接和用户操作 <三>