如何设计服装网站规划网站建设下载模板之后怎么修改
2025/12/27 18:27:42 网站建设 项目流程
如何设计服装网站规划,网站建设下载模板之后怎么修改,深圳网站建设 名片设计 网站管理,潍坊网站建设方案托管哈喽各位#xff0c;我是前端小L。 欢迎来到贪心算法专题第三篇#xff01; 我们要解决的问题很简单#xff1a;给你一个整数数组#xff08;有正有负#xff09;#xff0c;让你找出一个连续的子数组#xff0c;使得其和最大。 这道题如果用暴力法#xff08;两层循…哈喽各位我是前端小L。欢迎来到贪心算法专题第三篇 我们要解决的问题很简单给你一个整数数组有正有负让你找出一个连续的子数组使得其和最大。这道题如果用暴力法两层循环枚举所有子数组复杂度是 O(N2)会超时。 如果用贪心或者说动态规划的降维版复杂度直接降为 O(N)。力扣 53. 最大子序和https://leetcode.cn/problems/maximum-subarray/题目分析输入整数数组nums。目标找到一个具有最大和的连续子数组。输出该子数组的和。例子nums [-2, 1, -3, 4, -1, 2, 1, -5, 4]连续子数组[4, -1, 2, 1]的和是6是最大的。核心思维什么时候该“放弃”我们需要一个变量count来记录当前累加的和。 从左向右遍历数组累加count nums[i]。贪心决策如果count变成了负数比如-2它对于后面的元素来说就是一个“累赘”。因为负数 下一个数 下一个数。后面的数会想“与其加上你这个负数变小我还不如自己另起炉灶”策略一旦count 0立刻把count重置为0相当于放弃之前的序列从下一个元素开始重新累加。注意我们需要一个全局变量result来记录我们在过程中遇到的最大值。因为可能整个数组都是负数或者最大和出现在中间某一段而不是结尾。算法流程初始化result INT_MIN或者nums[0]记录历史最大值。count 0记录当前连续子序列的和。遍历数组count nums[i]。更新最大值if (count result) result count。这一步要在重置之前做确保我们记录下了这一瞬间的高光时刻。贪心重置if (count 0) count 0。如果当前和跌破 0归零重新开始。返回result。代码实现 (C)C#include vector #include climits // for INT_MIN using namespace std; class Solution { public: int maxSubArray(vectorint nums) { int result INT_MIN; // 最终结果 int count 0; // 当前累加和 for (int i 0; i nums.size(); i) { count nums[i]; // 1. 累加 // 2. 取最大值 (必须放在重置之前防止全负数的情况漏掉最大值) if (count result) { result count; } // 3. 贪心策略如果当前和已经是负数了就扔掉它 if (count 0) { count 0; } } return result; } };深度辨析贪心 vs 动态规划这道题其实也是经典的DP题目。DP 定义dp[i]表示以nums[i]结尾的最大连续子数组和。转移方程dp[i] max(dp[i-1] nums[i], nums[i])。如果dp[i-1]是负的那就不要它了直接取nums[i]。如果dp[i-1]是正的那就加上它。观察你看这不就是我们的贪心逻辑吗count其实就是dp[i-1]当它小于 0 时我们重置为 0相当于只取nums[i]。贪心写法只是把 DP 数组的空间优化到了 O(1) 而已。深度复杂度分析时间复杂度O(N)只需要遍历一次数组。空间复杂度O(1)只需要两个变量count和result。总结学会“及时止损”今天这道题的贪心哲学非常实用不要因为沉没成本而犹豫。当你发现当前的积累count已经变成负资产时无论之前付出了多少努力遍历了多少元素都要果断“归零”轻装上阵才能在未来后面的序列取得更大的成就result。下一题预告 如果我们在炒股这就更刺激了。 假设你能预知未来几天的股价并且可以无限次地买入卖出T0当天买当天卖都行你怎么操作才能赚得最多 贪心策略简直简单到令人发指只要今天比昨天贵我就赚这个差价下期见

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询