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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【算法系列之十四】最大子序和

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法系列之十四】最大子序和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、題目描述

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

示例:

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

2、解法及解題思路

public class MaximumSubarray {public static void main(String[] args) {int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};// int[] nums = {-1, -3, -4, 4, -2, -1, -5, -4};System.out.println(maxSubArray(nums));System.out.println(maxSubArray1(nums));}/*** 解法一 動態規劃(Kadane 算法)** @param nums* @return*/private static int maxSubArray(int[] nums) {// 迄今為止的最大和int res = nums[0];// 前一元素位置的最大和int sum = 0;for (int num : nums) {if (sum > 0) {// 如果 sum > 0,則說明 sum 對結果有增益效果,則 sum 保留并加上當前遍歷數字sum += num;} else {// 如果 sum <= 0,則說明 sum 對結果無增益效果,需要舍棄,則 sum 直接更新為當前遍歷數字sum = num;}// 每次比較 sum 和 res的大小,將最大值置為res,遍歷結束返回結果res = Math.max(res, sum);}return res;}/*** 解法二 貪心算法** @param nums* @return*/private static int maxSubArray1(int[] nums) {// 當前元素位置的最大和int curMax = nums[0];// 迄今為止的最大和int soFarMax = nums[0];for (int i = 1; i < nums.length - 1; i++) {curMax = Math.max(curMax, curMax + nums[i]);soFarMax = Math.max(soFarMax, curMax);}return soFarMax;}}

?

總結

以上是生活随笔為你收集整理的【算法系列之十四】最大子序和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。