Leetcode練習53. 最大子序(附加變種)

2021-02-08 遊戲前端的那些事
題目 難度-簡單

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

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

解題思路

1.先取第一個值,作為最大值max

2.設置一個累加結果值 sum=0;

3.判斷累加結果值是否大於0,大於0,則繼續累加當前值,否則將sum=nums[i];

4.比較這一輪的sum 與max 的大小。取大的值為max;

5.返回max;

具體代碼
const maxSubArray = function (nums) {
let max = nums[0];
let sum = 0;
for (let i = 1; i < nums.length; i++) {
sum = sum < 0 ? nums[i] : sum + nums[i];
max = Math.max(sum, max);
}
return max;
};

var nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
var result = maxSubArray(nums);
console.log(result);

附加題 如果還需要知道 最大子序的起始點和終結點

解題思路

1.可以增加 四個變量進行存儲,start,end,finialStart,finialEnd;

2.如果累加值小於0,則,start=end=i; 如果累加值大於0,則end=i;

3.判斷累加值是否大於max,大於則更新 finialStart=start,finialEnd=end;

具體代碼
const maxSubArray = function (nums) {
let max = nums[0];
let sum = 0;
let start = 0, end = 0, finialStart = 0, finialEnd = 0;
for (let i = 1; i < nums.length; i++) {
if (sum < 0) {
sum = nums[i];
end = start = i;
} else {
sum += nums[i];
end = i;
}
if (sum > max) {
max = sum;
finialEnd = end;
finialStart = start;
}
}
console.log(max, finialStart, finialEnd);
return max;
};

var nums = [-2, 1, -3, 4, -1];

var result = maxSubArray(nums);



相關焦點

  • 每天學一道leetcode:152.乘積最大子序列
    今天小王同學給大家帶來的是leetcode第152題「乘積最大子序列」。如果您從前做過這道題目,可以從小王同學的文章裡增強對該題目的記憶和印象,思考一下小王同學給出的思路和解法有沒有優化的空間。每天學一道leetcode:53. 最大子序和。
  • LeetCode-53.最大子序和(Maximum Subarray)
    53. 最大子序和給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。
  • 算法總結:最長上升子序列(LIS)
    最長遞增子序列(https://leetcode-cn.com/problems/longest-increasing-subsequence/)總體思路如果你不知道最長上升子序列是什麼意思,也沒有做那道題,我——當然不會怪你 😊最長上升(遞增)子序列這道題是最最基本的,也是最常考的題了,其他題目都是由它衍生而來。
  • 數據結構與算法:16 Leetcode同步練習(六)
    Leetcode同步練習(六)目錄題目01:相同的樹https://leetcode-cn.com/problems/same-tree/給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
  • ​LeetCode刷題實戰53:最大子序和
    今天和大家聊的問題叫做 最大子序和,我們先來看題面:https://leetcode-cn.com/problems/maximum-subarray/Given an integer array nums, find the contiguous subarray (containing at least one number
  • ​LeetCode刷題實戰152:乘積最大子數組
    今天和大家聊的問題叫做 乘積最大子數組,我們先來看題面:https://leetcode-cn.com/problems/maximum-product-subarray/Given an integer array nums, find the contiguous subarray within an array (containing
  • LeetCode-53. Maximum Subarray | 最大子序和
    temp = temp + nums[i] } else { temp = nums[i] } if temp > max { max = temp } } return max //返回最大值}執行結果:leetcode-cn
  • 最長回文子串 | Leetcode題解
    題目描述給定一個字符串 s,找到 s 中最長的回文子串。你可以假設  s 的最大長度為 1000。輸入: "cbbd"輸出: "bb"難度:支持語言:JavaScript、Java、Python相關標籤相關企業思路這是一道最長回文的題目,要我們求出給定字符串的最大回文子串
  • [LeetCode] 918. Maximum Sum Circular Subarray 環形子數組的最大和
    既然是子數組,則意味著必須是相連的數字,而由於環形數組的存在,說明可以首尾相連,這樣的話,最長子數組的範圍可以有兩種情況,一種是正常的,數組中的某一段子數組,另一種是分為兩段的,即首尾相連的,可以參見 大神 lee215 的帖子 中的示意圖。
  • 六十四、開始刷Leetcode之旅(Python版本)
    這個是中文的網址:https://leetcode-cn.com/problemset/all/下圖就是我的國際版本,其實我主要在國際版混日子,刷了100多題,其實我很菜的。這是它的官網,https://leetcode.com。
  • 第五題:最長回文子串【leetcode】
    給定一個字符串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
  • [LeetCode] 1143. Longest Common Subsequence 最長公共子序列
    Constraints:這道題讓求最長相同的子序列,注意是子序列,不是子串,所以字符並不需要相連,但是字符順序還是需要保持的。LeetCode 之前也有題目需要藉助求 LCS 來解題,比如 Delete Operation for Two Strings,當時博主還疑惑怎麼 LeetCode 中沒有專門求 LCS 的題呢,這不,終於補上了。
  • LeetCode刷題第三周【數組(簡單)】
    註:本文部分內容及所有題目源自於Leetcode網站[1],僅供本人自己學習與作為練習筆記使用。(所有引用都已標註原網址,見文章或附錄。若存在版權侵犯,請聯繫本人刪除侵權內容。)至少是其他數字兩倍的最大數(難度:簡單)Oct.29 刷題請點擊或見附錄:747. 至少是其他數字兩倍的最大數[4]題目要求:在一個給定的數組nums中,總是存在一個最大元素 。查找數組中的最大元素是否至少是數組中每個其他數字的兩倍。
  • [LeetCode] 916. Word Subsets 單詞子集合
    ","apple","facebook","google","leetcode"], B = ["l","e"]Output: ["apple","google","leetcode"]Example 3:Input: A = ["amazon","apple","facebook","google","leetcode"], B =
  • 初級樹狀數組 leetcode 練習題
    分享幾個簡單的樹狀數組練習題。一、背景之前分享了《樹狀數組模板》和《離散化模板》,今天來看幾道練習題。
  • Leetcode weekly contest三月小結
    Frog Position After T Secondshttps://leetcode.com/problems/frog-position-after-t-seconds/也是一個樹的題目,青蛙從根節點開始,每一秒會等概率地向下一個沒有訪問過的子節點跳躍,不能跳回已經訪問過的節點,如果沒有下一個節點可以跳,那麼青蛙會在該節點原地跳。
  • 數據結構與算法:05 Leetcode同步練習(一)
    /maximum-subarray/給定一個整數數組nums,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。示例 1:輸入: [-2,1,-3,4,-1,2,1,-5,4],輸出: 6解釋: 連續子數組 [4,-1,2,1] 的和最大,為 6。
  • AK leetcode 流浪計劃 - 回文串
    1 最長回文子串題目連結  https://leetcode-cn.com/problems/longest-palindromic-substring/題目大意給你一個字符串 s,找到 s 中最長的回文子串。
  • 一套代碼解決 Combination Sum 系列問題(LeetCode 39/40/216)
    我們在前一篇文章中已經講解過了回溯法中有重複元素的問題,並給出了子集、排列、組合問題的去重策略(要回顧前一篇文章,請點擊這裡)。總結 Combination Sum 系列問題是回溯法非常好的練習題,既能夠鞏固我們之前講解的候選元素、剪枝的概念,又能體會題目的不同變種給代碼帶來的影響。回溯法問題千變萬化,題目的細節條件稍有不同就變成了另一道題(甚至可能從回溯法變成了動態規劃,例如系列的第四題)。因此我們在做題的時候,一定要推敲題目的細節。
  • LeetCode 例題精講 | 05 雙指針*鍊表問題:快慢指針
    例題 3:判斷鍊表中是否存在環LeetCode 141 - Linked List Cycle[6](Easy)這道題的鍊表進行了小小的變種。鍊表的尾結點有可能指向鍊表中的某個結點,讓鍊表成為環形,如下圖所示。