JAVA算法练习题day11

普通数组

13.最大子数组和

通过这题复习了动态规划4部曲。同时发现自己推导DP递推式时候的致命错误,累积了分析经验。

java 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        //因为是求最大和的连续子数组。上一个状态(sum0)将影响到下一个状态的结果,动态规划
        //DP四部曲:DP数组的含义(数组本身以及下标),确定DP数组的递推式,DP数组初始化,确定遍历顺序,最后手动模拟DP数组
        //含义:DP[i]:以下标i为**结尾**的为某个连续子数组的最大和
        //递推式 dp[i] = max(dp[i-1],dp[i-1]+nums[i]) 不对,没有抓紧DP的含义。
        //针对每个位置,因为DP数组的含义,该位置的数字一定是要的,所以两种情况,1.要之前的和,2.不要之前的和。二者分别加上该数,取最大就好。
        int[] dp = new int[nums.length];
        int ans = 0;
        dp[0] = nums[0];
        ans = dp[0];
        for(int i = 1 ;i <nums.length ; i++){
            dp[i] =  Math.max(dp[i-1]+nums[i],nums[i]);
            ans = Math.max(dp[i],ans);
        }
        return ans;
    }
}

前缀和+贪心

复习前缀和:

图片来自"灵茶山艾府"https://leetcode.cn/problems/range-sum-query-immutable/solutions/2693498/qian-zhui-he-ji-qi-kuo-zhan-fu-ti-dan-py-vaar/

前缀和+贪心似乎把题目弄复杂了(对我来说更难理解此做法),就不研究了。

Python:

python 复制代码
class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        #python的语法真的奇怪,我还得多学,现在只是看得懂代码,但是写不出来
        dp = [0] * len(nums)
        dp[0] = nums[0]
        
        for i in range(1,len(nums)):
            dp[i] = max(nums[i],nums[i]+dp[i-1])
            dp[0] = max(dp[i],dp[0])
        return dp[0]
相关推荐
卷福同学1 天前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
码兄科技1 天前
Java AI智能体开发实战:从零构建智能对话系统指南
java·开发语言·人工智能
折哥的程序人生 · 物流技术专研1 天前
第8篇:六大设计原则在工厂模式中的体现
java·设计模式·设计原则·工厂模式·编程进阶·扩充系列
至乐活着1 天前
深入解析跳表SkipList:原理、实现与性能优化实战
数据结构·算法·跳表·skiplist·java实现
小明bishe181 天前
计算机毕业设计之基于JAVA的植物科普网站
java·spring boot·spring·架构·课程设计
Drone_xjw1 天前
从 GDB 到 CDB:C/C++ 程序调试的两把“手术刀”
c语言·开发语言·c++
r_oo_ki_e_1 天前
Java Map 集合学习笔记
java·笔记·学习
SL-staff1 天前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
Jerry1 天前
LeetCode 383. 赎金信
算法
聪明的一休丶1 天前
VLLM v0.24.0 版本深度解析:新引擎、新架构与大规模服务全家桶升级
python·架构·vllm