日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 53. 最大子序和(动态规划)

發(fā)布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 53. 最大子序和(动态规划) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目描述
    • 2. 解題
      • 2.1 暴力求解
      • 2.2 動態(tài)規(guī)劃

1. 題目描述

題目鏈接:https://leetcode-cn.com/problems/maximum-subarray/
《劍指Offer》同題:面試題42. 連續(xù)子數(shù)組的最大和

給定一個整數(shù)數(shù)組 nums ,找到一個具有最大和的連續(xù)子數(shù)組(子數(shù)組最少包含一個元素),返回其最大和。

輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6。

進階:
如果你已經(jīng)實現(xiàn)復雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。


2. 解題

類似題目:程序員面試金典 - 面試題 17.24. 最大子矩陣(轉(zhuǎn)成一維最大子序和 DP)

2.1 暴力求解

雙重循環(huán)O(n2)時間復雜度

class Solution { public:int maxSubArray(vector<int>& nums) {if(nums.size() == 0) return 0;int max = nums[0];//最大值int sum=0, i, j;for(i = 0; i< nums.size(); ++i){sum=0;for(j = i; j< nums.size(); ++j){sum += nums[j];if(sum > max) //實時更新最大值max = sum;}}return max;} };

2.2 動態(tài)規(guī)劃

狀態(tài)轉(zhuǎn)移方程
maxsum[i]=max(maxsum[i?1]+num[i],num[i])maxsum[i] = max( maxsum[i-1] + num[i], num[i] )maxsum[i]=max(maxsum[i?1]+num[i],num[i])
表示到i元素,最大子序列和的最大值
把所有maxsum[i]的元素最大值返回就是答案

if maxsum[i-1] + num[i] >= num[i] //num[i]起maxsum[i] = maxsum[i-1] + num[i] else maxsum[i] = num[i]maxSumOfSubArr = max{maxsum[0],maxsum[i]...maxsum[n-1]}

時間復雜度O(n)

i012345678
nums[i]-21-34-121-54
maxsum[i]-2max(-2+1,1)=1max(1-3,-3)= -2435615
class Solution { public:int maxSubArray(vector<int>& nums){int maxSumOfArr = INT_MIN, maxsum = 0;for(int i = 0; i < nums.size(); ++i){maxsum = max(nums[i],maxsum+nums[i]);maxSumOfArr = max(maxSumOfArr, maxsum);}return maxSumOfArr;} };

class Solution { public:int maxSubArray(vector<int>& nums) {int i, n = nums.size(), ans = nums[0];vector<int> dp(n,0);dp[0] = nums[0];for(i = 1; i < n; ++i){if(dp[i-1] >= 0)dp[i] = nums[i]+dp[i-1];elsedp[i] = nums[i];ans = max(ans,dp[i]);}return ans;} };

總結(jié)

以上是生活随笔為你收集整理的LeetCode 53. 最大子序和(动态规划)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。