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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

53. 最大子序和

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

最大子序和

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

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

解題思路

說實(shí)話,一開始拿到這道題目還真不知道如何下手。但是有一種暴力的方法肯定可以,就是遍歷唄誰不會呢。也就是正著思考,按個暴力遍歷,看看以第i個元素開頭的最大子序列是多少??梢允强梢?#xff0c;但是效率肯定低壓
想著想著不知不覺間想到了具體數(shù)學(xué)里面的一些思考方式。我們可以先拿小的來進(jìn)行實(shí)驗(yàn),觀察他們直接的關(guān)系
假設(shè)只有一個元素,肯定結(jié)果就是那一個元素,如果是兩個以及上呢?
假設(shè)有n個我們可以從頭到尾依次增加,下面表示序列長度
1
2
3
4

n-1
n
我們用一個變量max來存儲,最大子序和。
首先,max肯定等于第一個元素呀。因?yàn)橹挥幸粋€嘛
當(dāng)二個的時候,有三種情況,第一個元素是最大子序和,第二個元素是最大子序和或者兩元素之和為最大子序和。第一個元素我們已經(jīng)用max存儲起來了。下面只需要將第二個元素與兩元素之和比較過后的最大值與max進(jìn)行比較即可。

思考一下我們會發(fā)現(xiàn),以第i個數(shù)為結(jié)尾的子序和中的最大值,無非就第i個數(shù)自己 或者 以第i-i個數(shù)結(jié)尾的子序和中的最大值和第i個數(shù)的和

例如:
[-2 , 1, -3, 4, -1, 2, 1, -5, 4]
從第0個到最后一個以第i個元素結(jié)尾的最大子序和為:**-2 -1 -3 4 3 5 6 1 5 **, 其中的最大值6,就是整個序列的最大子序和。
思考道這里我們是不是就會發(fā)現(xiàn),將數(shù)組遍歷過后,以第i個數(shù)結(jié)尾的子序和的最大值,中的最大值就是我們整個序列的最大子序和。

代碼實(shí)現(xiàn)

  • 1
class Solution {public int maxSubArray(int[] nums) {int ans = nums[0];int max;for(int i = 0; i < nums.length; i++){int sum = 0;max = nums[i];for (int j = i; j < nums.length; j++) {sum += nums[j];max = max>sum?max:sum;}ans = ans>max ?ans:max;}return ans;} }

  • 2
class Solution {public int maxSubArray(int[] nums) {int last = 0, Ans = nums[0];for (int i : nums) {last = Math.max(last + i, i);Ans = Math.max(Ans, last);}return Ans;} }

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

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

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