题目描述

小米2020届笔试题
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)

解题思路

  1. 暴力求解
class Solution {
public:int FindGreatestSumOfSubArray(vector<int> array) {vector<int> res;if(array.size()==0){return 0;}for(int i=0; i<array.size(); i++){int sum=array[i];vector<int> tmpres;tmpres.push_back(sum);for(int j=i+1; j<array.size(); j++){sum+=array[j];tmpres.push_back(sum);}res.push_back(*max_element(tmpres.begin(), tmpres.end()));}return *max_element(res.begin(), res.end());}
};
  1. 剑指offer 的思路
class Solution {
public:int FindGreatestSumOfSubArray(vector<int> array) {vector<int> res;if(array.size()==0){return 0;}// 初始化int sum = array[0];int maxvalue = array[0];for(int i=1; i<array.size(); i++){// 如果sum加上改值大于该值,则加上该值,并更新maxvalueif(sum+array[i]>array[i]){sum+=array[i];if(sum>maxvalue){maxvalue=sum;}}// 如果sum加上改值小于该值,则舍弃掉前面的,从该点开始,并更新maxvalueif (sum+array[i]<array[i]){if(sum>maxvalue){maxvalue=sum;}sum=array[i];}}return maxvalue;}
};
  1. 优化第二种做法
class Solution {
public:int FindGreatestSumOfSubArray(vector<int> array) {vector<int> res;if(array.size()==0){return 0;}// 初始化int sum = array[0];int maxvalue = array[0];for(int i=1; i<array.size(); i++){// 如果sum小于0,则直接舍弃,并更新为当前的值if(sum<0){sum=array[i];}// 如果sum大于0,则加上当前的值else{sum+=array[i];}// 判断当前的sum的值是否大于maxvalueif(sum>maxvalue){maxvalue=sum;}}return maxvalue;}
};
  1. 动态规划
    使用动态规划
    F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变
    F(i)=max(F(i-1)+array[i] , array[i])

class Solution {
public:int maxfunc(int a, int b){if(a>b) return a;else return b;}int FindGreatestSumOfSubArray(vector<int> array) {vector<int> res;if(array.size()==0){return 0;}// 初始化int sum = array[0];int maxvalue = array[0];for(int i=1; i<array.size(); i++){ sum=maxfunc(sum+array[i], array[i]);maxvalue=maxfunc(sum, maxvalue);}return maxvalue;}
};

剑指offer:连续子数组的最大和相关推荐

  1. 剑指offer——连续子数组的最大值

    问题 剑指offer上的[连续子数组的最大值] 方法 动态规划 详解 问题拆分 容量为i数组 array[] 的连续子数组的最大值 max = max(end1,end2,--,endi) end2 ...

  2. 剑指offer---连续子数组的最大和

    题目:连续子数组的最大和 要求:例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(6-3-2+7).给一个数组,返回它的最大连续子向量的和. class Solution { ...

  3. 剑指offer--连续子数组的最大和

    动态规划:从第一项开始,如果前面数的累和小于0,且累和值不是记录的最大值,则从当前数重新开始迭代 动态规划将大问题分解为子问题求解,与分治法不同的是,分治法的子问题相互独立且通常利用递归进行求解, 而 ...

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

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

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

    剑指offer--面试题31:连续子数组的最大和 Solution1: 第一次做这道题.. 讲道理是这是标准的动态规划的题目,可是思路未完全想好. min_element(iterator, iter ...

  6. 剑指 Offer 42. 连续子数组的最大和(官解)

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

  7. LeetCode -- 剑指 Offer 42. 连续子数组的最大和

    剑指 Offer 42. 连续子数组的最大和 线性 DP 题. 针对于数组nums[i] 而言,以它为结尾的子数组分两种情况:(题目限制:必须是连续数组) num[i] 自身作为独立子数组:f[i] ...

  8. 剑指 Offer 42. 连续子数组的最大和

    摘要 剑指 Offer 42. 连续子数组的最大和 一. 动态规划分析 1.1 动态规划思路分析 假设nums数组的长度是n,下标从0到n−1.我们用 f(i)代表以第i个数结尾的连续子数组的最大和, ...

  9. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

  10. 【最佳解法】剑指 Offer 42. 连续子数组的最大和

    我是小张同学,立志用最简洁的代码做最高效的表达 思路:动态规划 假设nums\textit{nums}nums 数组的长度是 nnn,下标从 000 到 n−1n-1n−1. 我们用 f(i)f(i) ...

最新文章

  1. vue 带全选和多选的表格怎么写_vue实现下拉列表多选全选以及模糊查询的vue组件...
  2. 读取手柄_中高端游戏手柄比选,北通宙斯才是游戏的最佳拍档
  3. 解决WebStorm中git出现的 Could not read from remote repository问题
  4. 牛客题霸 NC22 合并两个有序的数组
  5. aspose java_Aspose.Cells for Java
  6. Python中可变类型和不可变类型的数据?
  7. LeetCode——DFS
  8. Apache Kafka(二)- Kakfa 安装与启动
  9. ------------ 异常笔记
  10. Quartz任务调度
  11. 使用Aspect和Spring Profile进行电子邮件过滤
  12. (2) MongoDB基本概念及与关系型数据库的对照
  13. flutter BottomAppBar 实现不规则底部导航栏
  14. [C# 基础知识系列]专题十五:全面解析扩展方法
  15. 盐城有哪些中专计算机学校,盐城有什么中专学校
  16. 基于Swift的简易iOS天气APP
  17. 为增强软件供应链安全,NIST 发布《开发者软件验证最低标准指南》
  18. 专题二——数学问题与简单DP
  19. The requested PHP extension ext-redis * is missing from your system. Install or enable PHP's redis e
  20. Eclipse中SVN分支与合并

热门文章

  1. [Ruby01]Class, Module, Object,Kernel的关系
  2. 未来的信息安全管理人员应当具备哪些技能
  3. 让Centos5.6的Firefox支持Java
  4. fft 相位谱_信号处理之功率谱原理与python实现
  5. python logging logger
  6. 自然语言处理好的 实体分词 及BERT
  7. @Bean 与@Component的区别
  8. python解释器pypy
  9. CountVectorizer 统计文本重复率 sklearn API
  10. Oracle SQL Loader的详细语法