当前位置: 首页 > news >正文

最大子序和(maximum-subarray)——动态规划和贪心双解法

最大子序和(maximum-subarray)

题目

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

思路与代码

贪心(java)

前面的和大于0就加上当前元素,否则,重置为当前元素的值。

class Solution {
    public int maxSubArray(int[] nums) {
        int res = nums[0];
        int sum = 0;
        for (int num : nums) {
            if (sum > 0)
                sum += num;
            else
                sum = num;
            res = Math.max(res, sum);
        }
        return res;        
    }
}

注意,题目要求返回的是和。还有,数组是不应该被重新排序。

动态规划(c++ )

若前一个元素大于0,则将其加到当前元素上。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        std::vector<int> dp(nums.size(),0);
        dp[0] = nums[0];

        int max_res = dp[0];
        for(int i = 1;i<nums.size();i++){
            dp[i] = std::max(dp[i-1]+nums[i],nums[i]);

            if(max_res<dp[i]){
                max_res = dp[i];
            }
        }
        return max_res;
    }
};

相关文章:

  • Deepin系统安装SSH服务
  • Deepin Gif转mp4
  • 零钱兑换(coin-change) 动态规划问题
  • 批量识别图版中的文字信息之百度AI文字识别
  • 操作系统 术语表
  • GoldenDict 调用百度翻译(多段文本)
  • Hexo常用命令
  • 最小路径和(minimum-path-sum)
  • Leetcode.4.寻找两个有序数组的中位数(problems/median-of-two-sorted-arrays)
  • python调试PDB工具命令
  • PAT乙级介绍
  • PAT乙级1011. A+B和C(C语言)
  • 错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
  • sql优化的几种方法(面试必背)
  • mysql的性能优化(经典必看)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【mysql】环境安装、服务启动、密码设置
  • 10个确保微服务与容器安全的最佳实践
  • Android Studio:GIT提交项目到远程仓库
  • const let
  • CSS中外联样式表代表的含义
  • java2019面试题北京
  • MySQL的数据类型
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • PaddlePaddle-GitHub的正确打开姿势
  • WebSocket使用
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 关于使用markdown的方法(引自CSDN教程)
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 力扣(LeetCode)357
  • 排序算法之--选择排序
  • 普通函数和构造函数的区别
  • 如何用vue打造一个移动端音乐播放器
  • 通过几道题目学习二叉搜索树
  • 整理一些计算机基础知识!
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (12)Linux 常见的三种进程状态
  • (二)丶RabbitMQ的六大核心
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (五)Python 垃圾回收机制
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .bat批处理(一):@echo off
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net CHARTING图表控件下载地址
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NetCore部署微服务(二)
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET中使用Redis (二)
  • [] 与 [[]], -gt 与 > 的比较