动态规划合集
一. 53. 最大子数组和题目要求给你一个整数数组 nums 请你找出一个具有最大和的连续子数组子数组最少包含一个元素返回其最大和。子数组是数组中的一个连续部分。1. 动态规划做法F[i] max(F[i-1] nums[i], nums[i])classSolution{public:intmaxSubArray(vectorintnums){intret-1e5;intsum0;//截至到当前元素的最大子数组和for(autoe:nums){if(sumee)sume;elsesume;// F[i] max(F[i-1] nums[i], nums[i])retmax(ret,sum);}returnret;}};2. 前缀和做法classSolution{public:intmaxSubArray(vectorintnums){intresult-1e5;intmin_pre_sum0;intpre_sum0;for(inti:nums){pre_sumi;// 当前的前缀和总体resultmax(result,pre_sum-min_pre_sum);// pre_sum-min_pre_sum 当前的前缀和总体 - 前缀和的最小值min_pre_summin(min_pre_sum,pre_sum);// 更新前缀和的最小值(是前缀和的子数组 不包含前缀和总体)}returnresult;}};