真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golang中怎么利用leetcode連續(xù)數(shù)列

本篇文章為大家展示了golang中怎么利用leetcode連續(xù)數(shù)列,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、太原網(wǎng)站維護(hù)、網(wǎng)站推廣。

給定一個整數(shù)數(shù)組(有正數(shù)有負(fù)數(shù)),找出總和最大的連續(xù)數(shù)列,并返回總和。

示例:

輸入:[-2,1,-3,4,-1,2,1,-5,4]

輸出:6

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

進(jìn)階:

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

解題思路

解題方案一 (動態(tài)規(guī)劃)

思路

假設(shè)數(shù)組名稱為arr,結(jié)果數(shù)組為result

  1. 當(dāng)只有一個數(shù)字的時候,最大的連續(xù)數(shù)列只能是這個數(shù)字,所以序號為0的位置,最大值為-2,則有result[0] = arr[0]

  2. 當(dāng)有兩個數(shù)字時,有兩種情況

    1. 保留前邊的序列,此時值為result[0] + arr[1]=

    2. 不保留前邊的序列,此時值為1,即arr[1]

    3. 此時選取最大值的話為1

  3. 到第三個數(shù)字時

    1. 保留前邊的序列,值為result[1] + arr[2] = 1 + -3 = -2

    2. 不保留前邊的序列,值為arr[2] = -3

    3. 此時選取最大值的話為-3

  4. 以此類推的話可以得到下表

序號012345678
數(shù)值(arr數(shù)組)-21-34-121-54
保留前邊的序列
-1-4-135615
不保留前邊的序列
1-34421-54
最大值(result數(shù)組)-21-3445614
  1. 總結(jié)可得如下規(guī)律
    golang中怎么利用leetcode連續(xù)數(shù)列

  2. 最終只需取得result[]中值最大的數(shù)即為結(jié)果

代碼
   public static int maxSubArray(int[] arrs) {
       int len = arrs.length;
       int maxNum = arrs[0];
       int[] result = new int[arrs.length];
       result[0] = maxNum;
       for (int i = 1; i < len; i++) {
           int a = result[i - 1] + arrs[i];  //保留前邊的序列
           int b = arrs[i];  //不保留前邊的序列

           int curMax = Math.max(a, b);
           result[i] = curMax;

           if (curMax > maxNum) {
               maxNum = curMax;
           }
       }
       return maxNum;
   }
代碼優(yōu)化

由于上述過程中,創(chuàng)建了result數(shù)組,但是實際上每次循環(huán)時,當(dāng)前數(shù)字計算完之后就沒有其他用處了,所以此處可以使用arrs數(shù)組作為result數(shù)組來用,優(yōu)化后如下

    public static int maxSubArray(int[] arrs) {
       int len = arrs.length;
       int maxNum = arrs[0];
       for (int i = 1; i < len; i++) {
           int a = arrs[i - 1] + arrs[i];  //保留前邊的序列
           int b = arrs[i];  //不保留前邊的序列

           int curMax = Math.max(a, b);
           arrs[i] = curMax;

           if (curMax > maxNum) {
               maxNum = curMax;
           }
       }
       return maxNum;
   }

代碼實現(xiàn)

func maxSubArray(nums []int) int {sum:=0max:=0for i,n:=range nums{    if i==0{        max=n        sum=n        continue    }    if sum+n>n{        sum+=n    }else{        sum=n    }    if max 

上述內(nèi)容就是golang中怎么利用leetcode連續(xù)數(shù)列,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站名稱:golang中怎么利用leetcode連續(xù)數(shù)列
文章出自:http://weahome.cn/article/jeocci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部