Leetcode 53 Maximum Subarray Easy
https://leetcode.com/problems/maximum-subarray/
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

分析:
本题虽然标的是一道easy题,但刚开始做我是没有思路的。那么,就思考,如果暴力解决这道题该怎么做?那就对每次遍历到的元素和它之前的连续元素进行求和,看是否大于目前的最大和值,时间复杂度为O(n^2)。在演草纸上做这个过程时,你就会发现,这么做效率不高:在遍历到当前元素做连续元素相加这个操作时,前一个元素做了类似操作,所以实际上可以利用前一个元素的计算结果。但是,这样依然不能减少时间复杂度,怎么办?还可以接着想,遍历到当前元素时,我们不必要对其之前的连续元素进行累加计算,只需要对之前产生最大累加和的连续元素的结果进行累加即可。这样,我们可以这么做:用一个变量来存放之前元素的最大累加和(注意,这里面必须包含前一个元素),用另一个变量来存放最大值这个结果。这个方法的时间复杂度是O(n)。程序可以这么写:

class Solution {
public:
int maxSubArray(vector<int>& nums) {
int curMax, result;
curMax = result = nums[];
int len = nums.size();
for (int i = ; i < len; ++i) {
curMax = curMax + nums[i] > nums[i] ? curMax + nums[i] : nums[i];
result = curMax > result ? curMax : result;
}
return result;
}
};

写到这里,我自己都没有想到就用动态规划的思想把这个题bugfree了。有时,看到别人想出一个好的方法也许并不是人家一开始就想到了,而是通过从简单开始分析,一点一点优化步骤,得到好的思路和方法。当然了,有些题目可以从完全不同的两个方向去解决,这时候换一种角度思考问题反而更重要。

最新文章

  1. 利用Tomcat内置的servlet实现文件下载功能
  2. svn记录删除
  3. 使用yum时,保留下载包设置
  4. [Top-Down Approach] Chatper 4 Notes
  5. php大力力 [028节] 如何下载js文件,网上一个*.js无法下载啊??????
  6. JSTL、EL、ONGL、Struts标签的区别与使用
  7. PythonCrawl自学日志(2)
  8. C#委托简介
  9. JAVA课程设计+五子棋(个人博客)
  10. [HNOI2012]集合选数(状压DP+构造)
  11. Vue-router(基础)_滚动行为和history模式
  12. Spark参数详解 一(Spark1.6)
  13. OKVIS 代码框架
  14. linux下mysql 8.0安装
  15. 杀死进程-LeetCode-582
  16. NO.3day 网络基础
  17. go语言解析 map[string]interface{} 数据格式
  18. 11.Git分支管理
  19. 动态更新ViewPager中的Fragment(替换Fragment)
  20. Windows2003终端服务器超出了最大连接数的问题解决方案

热门文章

  1. 《深入理解Java虚拟机》之(二、垃圾收集器与内存分配策略)
  2. osm3ge
  3. np中的温故知新
  4. 012_linuxC++之_类的继承定义
  5. SpringBoot+Mybatis-Plus两种分页方法
  6. [Luogu] 列队
  7. Meathill的博客地址
  8. 在CUDA8.0下指定位置编译安装OpenCV3.1.0来实现GPU加速(Compiling OpenCV3.1.0 with CUDA8.0 support)
  9. Netfilter 之 连接跟踪的helper
  10. curl_setopt(ch, option, value)函数上传文件