Go 刷 leetcode|一道簡單難度卻讓我陷入沉思的題目

2021-01-14 Go語言中文網

今天為大家講解 LeetCode 第 53 題,繼續為大家帶來一道常考的數組題目。

題目描述

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

示例:

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

如果你已經實現複雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。

來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/maximum-subarray著作權歸領扣網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解題思路 動態規划動態規劃的是首先對數組進行遍歷,當前最大連續子序列和為 sum,結果為 ans如果 sum > 0,則說明 sum 對結果有增益效果,則 sum 保留並加上當前遍歷數字如果 sum <= 0,則說明 sum 對結果無增益效果,需要捨棄,則 sum 直接更新為當前遍歷數字每次比較 sum 和 ans 的大小,將最大值置為ans,遍歷結束返回結果

遍歷一次,時間複雜度為 O(n)

空間複雜度為O(1)

圖解如下

代碼實現
//go
func maxSubArray(nums []int) int {
    ans := nums[0]
    sum := 0
    for _, val := range nums {
        if sum > 0 {
            sum += val
        }else {
            sum = val
        }
        ans = max(ans, sum)
    }
    return ans
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

class Solution {
    public int maxSubArray(int[] nums) {
        int ans = nums[0];
        int sum = 0;
        for(int num: nums) {
            if(sum > 0) {
                sum += num;
            } else {
                sum = num;
            }
            ans = Math.max(ans, sum);
        }
        return ans;
    }
}

鄭重聲明:

所展示代碼已通過 LeetCode 運行通過,請放心食用~

在嘮嘮嗑

很多人都想養成好習慣,但大多數人卻是三分鐘熱度。為了我們能一起堅持下去,決定製定如下計劃(福利)

一起學算法,打卡領紅包!

參與方式:

關注我的微信公眾號「Kevin的學堂」

還可「加群」與眾多小夥伴

一起堅持,一起學習,一起更優秀!

打卡規則為:

「留言」「打卡XXX天」 ➕「分享」到朋友圈

獎勵:

連續打卡 21 天,聯繫本人獲取 6.6 元紅包一個!

連續打卡 52 天,聯繫本人獲取 16.6 元紅包一個!

連續打卡 100 天,聯繫本人獲取 66.6 元紅包一個!

長按掃碼,一起進步




推薦閱讀

站長 polarisxu

自己的原創文章

不限於 Go 技術

職場和創業經驗

Go語言中文網

每天為你

分享 Go 知識

Go愛好者值得關注


相關焦點

  • LeetCode刷題第三周【數組(簡單)】
    日期Oct.28 - Nov.03 2020(每日一題)Ps:本周我們接著上一周繼續刷數組,難度依舊是簡單,題目不再按順序,而是隨機挑選,下周開始會加深難度。隨著學校的開課,我會將平時上課的內容和筆記也整理成MK的格式上傳。
  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • 每天一道leetcode234-回文鍊表
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.6號打卡明天的題目:https://leetcode-cn.com/problems/remove-linked-list-elements/以後明天的題目提取公布一下哈,因為有些朋友想提前做一下~題目 leetcode234-回文鍊表中文連結:https
  • 每天一道leetcode56-合併區間
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.13號打卡明天的題目:https://leetcode-cn.com/problems/minimum-path-sum/descrip題目 每天一道leetcode56
  • 刷了幾千道算法題,我私藏的刷題網站都在這裡了
    1、leetcode英文網址:https://leetcode.com/中文網址:https://leetcode-cn.com/估計 leetcode(力扣)大家都很熟悉了,都被推薦爛了,很多國內外的程式設計師在上面刷題
  • Leetcode刷題No.234
    現在越來越覺得題目有套路了。今天的題目就是一道套路題。
  • LeetCode數組類知識點&題型總結
    leetcode第一題就是two-sum,對於這類題目,首先看題目要求的時間複雜度和空間複雜度是什麼,其次看有沒有限制條件,如要求不能有重複的子數組或者要求按照升序/降序排列等。解法如下:Leetcode中包含該類型的題目:序號題目難度代碼1Two Sumeasypython、java、c++167Two Sum II-Input array is sortedeasypython、java、c++153Summediumpython、java、c++163Sum Closetmediumpython、java、c++2593Sum
  • LeetCode面試系列 第6天:No.9 - 迴文數
    今天我們來分析一道相對輕鬆的字符串面試題吧,恰好大家從Python 100天中學到的字符串知識可以派上用場。Leetcode今天要給大家分析的面試題是 LeetCode 上第 9 號問題,LeetCode - 9.
  • [LeetCode] 912. Sort an Array 數組排序
    [1,2,3,5]Example 2:Input: [5,1,1,2,0,0]Output: [0,0,1,1,2,5]Note:1<=A.length<=10000-50000<=A[i]<=50000這道題讓我們給數組排序,在平時刷其他題的時候
  • ​LeetCode刷題實戰137:只出現一次的數字 II
    算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。
  • 通關LeetCode刷題完整攻略,省時又高效
    按照分類刷,每個分類的題目,解法類似,這樣就用一個思路解一類題目了:方便大家閱讀,我把內容也貼出來放在這個回答下:1.最簡單的方式是這樣的:middle = (start + end) / 2。但這種計算方式有不小的概率會出現整數越界。
  • 每日一道 LeetCode (15):二進位求和
    ❞前文合集每日一道 LeetCode 前文合集代碼倉庫GitHub:https://github.com/meteor1993/LeetCodeGitee:https://gitee.com/inwsy/LeetCode
  • Leetcode上你刷到最難的是哪道題?
    本文轉載自【微信公眾號:小碼逆襲,ID:gh_7c5a039380a0】經微信公眾號授權轉載,如需轉載與原文作者聯繫大傢伙想要找份好工作,刷題是一道繞不過的坎,Leetcode大家都很熟悉了,很多公司面試的時候會用上面的原題,今天我們就來看看這
  • 小張刷題計劃
    原題為了提高自己的代碼能力,小張制定了 LeetCode 刷題計劃,他選中了 LeetCode 題庫中的 n 道題,編號從 0 到 n-1,並計劃在 m 天內按照題目編號順序刷完所有的題目(注意,小張不能用多天完成同一題)。在小張刷題計劃中,小張需要用 time[i] 的時間完成編號 i 的題目。
  • ​LeetCode刷題實戰53:最大子序和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 最大子序和,我們先來看題面:https://leetcode-cn.com/problems/maximum-subarray/Given an integer array nums, find the contiguous subarray (containing at least one number
  • LeetCode 圖解 | 38. 外觀數列
    前五項如下:1. 12. 113. 214. 12115. 1112211 被讀作  "one 1"  ("一個一") , 即 11。11 被讀作 "two 1s" ("兩個一"), 即 21。
  • 怒刷leetcode...
    心態放平,好好刷leetcode,好offer總在不遠處。   計算機視覺畢業後找不到工作怎麼辦?   AI專業畢業後是不是找不到工作?近日,有知乎網友提問,獲得了70萬閱讀量。 我認識的很多跨專業的同學根本不知道。我覺得最錯誤的是把 ML當作一個獨立的領域,而不是一個計算機從業人員應有的能力。這樣就導致同學們只知道ML,而不去考慮CS基礎。   一名匿名用戶說:   我周圍很多非計算機科班出身的人,做開發對他們而言難度和跨度都太大。   相比較之下,學個python,看看論文,找個開源項目改吧改吧就能跑出個結果,反而更容易。
  • 一道經典幾何題:求∠C的度數,題目難度大,輔助線不易做
    對於這個問題,我曾經對學校的初中生和高中生進行了一個簡單的調查,結果表明更多的學生認為幾何比代數難,而且這一比例在女生中更高。幾何難在什麼地方呢?難在輔助線。 如上圖,已知∠A=30°,∠B=90°,AB=BC=AD,求∠C的度數。