剑指offer——面试题31:连续子数组的最大和
剑指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:连续子数组的最大和相关推荐
- 剑指offer面试题42. 连续子数组的最大和(动态规划)
题目描述 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求时间复杂度为O(n). 思路 详见链接 代码 class Solution: ...
- 【剑指offer-Java版】31连续子数组的最大和
连续子数组最大和,要求O(n)时间复杂度 思路:核心思想就是当前遍历数组的时候,遇到的是一个正数,计算这个正数加上已有的和得到一个新的和 如果这个新的和比当前的正数大,那么保留该和否者更新和为当前正数 ...
- 面试题31.连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数.数组中一个或者连续多个整数组成一个子数组. 求所有子数组的和的最大值.要求时间复杂度O(n) 本题可以把所有子数组全部找出来再求其和的最大值便可以得出,但 ...
- 剑指offer面试题[31]-连续数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- [剑指offer]面试题31:连续子数组的最大和
面试题31:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). ❖ 解法一:举例分析数组的 ...
- 剑指offer面试题31. 栈的压入、弹出序列(链表)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...
- 剑指Offer面试题:28.连续子数组的最大和
一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...
- 【剑指 offer】(31)—— 连续子数组的最大和(动态规划)
题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为 O(n)O(n). 例如,输入的数组为 {1, -2, 3, 10, ...
- 【LeetCode】剑指 Offer 42. 连续子数组的最大和
[LeetCode]剑指 Offer 42. 连续子数组的最大和 文章目录 [LeetCode]剑指 Offer 42. 连续子数组的最大和 一.动态规划 一.动态规划 状态定义 设动态规划列表 dp ...
最新文章
- CodeGen标记循环
- 【机器学习基础】SVM算法在项目实践中的应用!
- 详解道路标记数据集 CeyMo: See More on Roads -- A Novel Benchmark Dataset for Road Marking Detection
- cpolar——安全的内网穿透工具
- android打电话录音软件,Android uni-app实现音视频通话
- 【实习生面试】阿里前端实习生一面流程及题目
- 基于微信功能社群助手
- 监测 Windows 应用行为
- 微信小程序实现五星评分效果
- 智能语音计算器(四)
- hmmlearn使用简介
- Android shortcut的使用及源码分析
- Win10修改MySQL数据库密码示例
- adb 指令连接手机、平板进行Wi-Fi调试
- matcom支持matlab版本,matlab哪个版本用得最多?
- 读后感与机翻《AOGNets》
- 最后还是菜是原罪—华为武研所优招面经
- 查看windows系统的序列号
- 批处理归一化的多损失孪生网络的恶意软件检测
- 通用gadget详解
热门文章
- 2.2 Mnist手写数据集
- CListCtrl,SetItemState 高亮(显示蓝色)
- html取元素的文本,解析HTML以获取元素内的文本
- java 计算器 下载_那里可以下载到JAVA编的计算器程序??
- python 多态 锁_python 上下文管理器,多态,数据锁定与自省,
- python装饰器class_Python装饰器dataclass详解
- github 仓库管理及代码上传
- cad渐开线齿轮轮廓绘制_CAD画齿轮的渐开线程序 (lsp)和渐开线齿轮关系
- 叶片制成切片的结构示意图_更集成的发动机!洞悉UTC 3D打印整体式半叶片
- microsoft visual c++全家桶_“网蓝”盒子咖啡新品来袭!顺德第①桶MINI冰摇咖啡,可以背着逛街...