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

算法刷题--动态规划

动态规划最主要的就是推方程了。
考虑这么一道题目:
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。

这个就是考虑,当新的元素进来的时候,最大的是加入前缀还是最大的是他自己,
max( nums[i], nums[i]+dp[i-1] )

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        vector<int> dp(nums.size());
        dp[0] = nums[0];
        for (int i = 1; i < nums.size(); i++){
            dp[i] = max(nums[i], nums[i]+dp[i-1]);
        }
        sort(dp.begin(),dp.end());
        return dp.back(); 
        
    }
};

暴力破解版本,利用那个前缀和的pre[i]-pre[j-1]来解决从j到i之间子数组的和的问题,但超出时间限制。原则上来讲是没问题的。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int result = nums[0];
        if (nums.size() == 1) return result;
        int tempsum = 0;
        vector<int> pre;
        for (int val : nums){
            tempsum += val;
            pre.push_back(tempsum);
            result = max(result, tempsum);
        }
        for (int i = 1; i < nums.size(); i++){
            int j = i;
            while(j < nums.size()){
                tempsum = pre[j] - pre[i-1];
                result = max(result, tempsum);
                j++;
            }
        }
        return result;
    }
};

http://www.kler.cn/a/599776.html

相关文章:

  • centos 7 搭建FTP本地用户
  • 拓展知识三:编码学及密码学
  • Vue3 实现pdf预览
  • 如何确保异步任务在 HTTP 返回后继续执行?context.WithoutCancel
  • Rust语言的图形用户界面
  • 您是否需要管理型PoE交换机?
  • 2025年渗透测试面试题总结-某深信服-深蓝攻防实验室(题目+回答)
  • C++对C的拓展-3.22笔记
  • JAVA学习*Object类
  • python3面试题23个(设计模式、面向对象、正则)
  • Typora安装使用教程 简单易用的Markdown编辑器
  • 解决思科交换机无法访问局域网外设备
  • C++学习之路,从0到精通的征途:string类
  • 深入理解Spring框架:核心概念与组成剖析
  • C++题目
  • uv - reference [官方文档翻译]
  • 【嵌入式学习2】内存管理
  • GitLens with `Commit Graph`
  • 使用Python调用Jenkins Api之获取构建日志使用说明文档
  • 两个手机都用流量,IP地址会一样吗?深入解析