剑指offer——面试题31:连续子数组的最大和

Solution1:

第一次做这道题。。
讲道理是这是标准的动态规划的题目,可是思路未完全想好。
min_element(iterator, iterator)和max_element(iterator, iterator),迭代器的指示范围是[闭,开)区间,返回值可以是迭代器或指针(最小或最大元素的位置)。
Solution1:自己想出来的菜鸡方法。。。

class Solution {
public:int FindGreatestSumOfSubArray(vector<int> array) {int n = array.size();if(n <=0 )return 0;if(n == 1)return array[0];vector<int> temp(n,0);temp[0] = array[0];for(int i = 1; i < n; i++)temp[i] = temp[i-1] + array[i];int temp_max = temp[n-1],res_max = INT_MIN;for(auto iter = temp.end()-1; iter>temp.begin(); iter--){temp_max = max(temp_max, *iter - *min_element(temp.begin(),iter));res_max = max(res_max,temp_max);}return max(res_max,temp[0]);}
};

Solution2:动态规划思想放光芒!

参考网址:http://www.cnblogs.com/qqky/p/6931976.html
解题思路:本题时动态规划问题
dp[i]表示到以a[i]结尾的最长连续子数组的最大和
dp[i] = array[i] i==0 || dp[i-1]<0
dp[i] = dp[i-1] + array[i] i != 0 && dp[i-1] > 0
定义一个初始值为最小值的maxSum,然后如果dp[i]>maxSum maxSum = dp[i]最后返回maxSum

class Solution {public://dp[i] = array[i]  i==0 || dp[i-1]<0//dp[i] = dp[i-1] + array[i] i != 0 && dp[i-1] > 0int FindGreatestSumOfSubArray(vector<int> array) {int length = array.size();if(array.empty() || length <=0)return 0;int dp[length];memset(dp,0,length);dp[0] = array[0];int maxSum = dp[0];for(int i=1;i<length;i++){if(dp[i-1] > 0){dp[i] = dp[i-1] + array[i];}else{dp[i] = array[i];}if(dp[i] > maxSum){maxSum = dp[i];}}return maxSum;}};

20180904重做:比较标准的dp写法

class Solution {
public:int FindGreatestSumOfSubArray(vector<int> array) {if (array.size() == 1) return array[0];vector<int> dp(array.size(), 0);dp[0] = array[0];int max_val = dp[0];for (int i = 1; i < array.size(); i++) {if (dp[i - 1] <= 0)dp[i] = array[i];else dp[i] = dp[i - 1] + array[i];max_val = max(max_val, dp[i]);}return max_val;}
};

剑指offer——面试题31:连续子数组的最大和相关推荐

  1. 剑指offer面试题42. 连续子数组的最大和(动态规划)

    题目描述 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求时间复杂度为O(n). 思路 详见链接 代码 class Solution: ...

  2. 【剑指offer-Java版】31连续子数组的最大和

    连续子数组最大和,要求O(n)时间复杂度 思路:核心思想就是当前遍历数组的时候,遇到的是一个正数,计算这个正数加上已有的和得到一个新的和 如果这个新的和比当前的正数大,那么保留该和否者更新和为当前正数 ...

  3. 面试题31.连续子数组的最大和

    题目:输入一个整型数组,数组里有正数也有负数.数组中一个或者连续多个整数组成一个子数组. 求所有子数组的和的最大值.要求时间复杂度O(n) 本题可以把所有子数组全部找出来再求其和的最大值便可以得出,但 ...

  4. 剑指offer面试题[31]-连续数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  5. [剑指offer]面试题31:连续子数组的最大和

    面试题31:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). ❖ 解法一:举例分析数组的 ...

  6. 剑指offer面试题31. 栈的压入、弹出序列(链表)

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...

  7. 剑指Offer面试题:28.连续子数组的最大和

    一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...

  8. 【剑指 offer】(31)—— 连续子数组的最大和(动态规划)

    题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为 O(n)O(n). 例如,输入的数组为 {1, -2, 3, 10, ...

  9. 【LeetCode】剑指 Offer 42. 连续子数组的最大和

    [LeetCode]剑指 Offer 42. 连续子数组的最大和 文章目录 [LeetCode]剑指 Offer 42. 连续子数组的最大和 一.动态规划 一.动态规划 状态定义 设动态规划列表 dp ...

最新文章

  1. CodeGen标记循环
  2. 【机器学习基础】SVM算法在项目实践中的应用!
  3. 详解道路标记数据集 CeyMo: See More on Roads -- A Novel Benchmark Dataset for Road Marking Detection
  4. cpolar——安全的内网穿透工具
  5. android打电话录音软件,Android uni-app实现音视频通话
  6. 【实习生面试】阿里前端实习生一面流程及题目
  7. 基于微信功能社群助手
  8. 监测 Windows 应用行为
  9. 微信小程序实现五星评分效果
  10. 智能语音计算器(四)
  11. hmmlearn使用简介
  12. Android shortcut的使用及源码分析
  13. Win10修改MySQL数据库密码示例
  14. adb 指令连接手机、平板进行Wi-Fi调试
  15. matcom支持matlab版本,matlab哪个版本用得最多?
  16. 读后感与机翻《AOGNets》
  17. 最后还是菜是原罪—华为武研所优招面经
  18. 查看windows系统的序列号
  19. 批处理归一化的多损失孪生网络的恶意软件检测
  20. 通用gadget详解

热门文章

  1. 2.2 Mnist手写数据集
  2. CListCtrl,SetItemState 高亮(显示蓝色)
  3. html取元素的文本,解析HTML以获取元素内的文本
  4. java 计算器 下载_那里可以下载到JAVA编的计算器程序??
  5. python 多态 锁_python 上下文管理器,多态,数据锁定与自省,
  6. python装饰器class_Python装饰器dataclass详解
  7. github 仓库管理及代码上传
  8. cad渐开线齿轮轮廓绘制_CAD画齿轮的渐开线程序 (lsp)和渐开线齿轮关系
  9. 叶片制成切片的结构示意图_更集成的发动机!洞悉UTC 3D打印整体式半叶片
  10. microsoft visual c++全家桶_“网蓝”盒子咖啡新品来袭!顺德第①桶MINI冰摇咖啡,可以背着逛街...