国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

leetcode53 Maximum Subarray 最大連續(xù)子數(shù)組

Bamboy / 1698人閱讀

摘要:我們可以分別得出這三種情況下的最大子數(shù)列和,并比較得出最大的那個(gè)。我們只需要考慮左子列的最大和以及跨越了左右的中子列的最大值。

題目要求
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

即:尋找數(shù)列中的一個(gè)子數(shù)列,該數(shù)列中的值得和是所有子數(shù)列中最大的。

思路一:divide&conquer

我們可以從數(shù)列的中間節(jié)點(diǎn)將數(shù)列分為兩個(gè)子數(shù)列,則最大的子數(shù)列要么在左子列,要么在右子列,要么跨越了左子列和右子列。我們可以分別得出這三種情況下的最大子數(shù)列和,并比較得出最大的那個(gè)。
divide&conquer即遞歸思路,將復(fù)雜問(wèn)題分解為簡(jiǎn)單的小問(wèn)題分別解決。遞歸的重點(diǎn)在于覆蓋所有可能情況,并且覆蓋到基類。

    public int maxSubArray(int[] nums) {
        int start = 0;
        int end = nums.length - 1;
        return maxSubArray(nums, start, end);
        
        
    }
    
    //遞歸調(diào)用該方法
    public int maxSubArray(int[] nums, int start, int end){
        if(start==end){
            return nums[start];
        }
        int mid = (start + end) / 2;
        //獲得最大左子列
        int leftMax = maxSubArray(nums, start, mid);
        //獲得最大右子列
        int rightMax = maxSubArray(nums, mid+1, end);
        
        //獲得最大中子列
        int leftSumMax = Integer.MIN_VALUE;
        int temp = 0;
        do{
            temp += nums[mid];
            if(temp>leftSumMax){
                leftSumMax = temp;
            }
        }while((--mid)>=start);
        
        temp = 0;
        mid = (start + end)/2 + 1;
        int rightSumMax = Integer.MIN_VALUE;
        do{
            temp += nums[mid];
            if(temp>rightSumMax){
                rightSumMax = temp;
            }
        }while((++mid)<=end);
        int midMax = leftSumMax + rightSumMax;
        return Math.max(Math.max(leftMax, rightMax), midMax);
    }
思路二:divide&conquer2 recursion

上面是將數(shù)組從中劃分為兩個(gè)子數(shù)組,這里我們還可以劃分為nums[n-1]和nums[n]。這樣我們就可以將右子列的情況簡(jiǎn)化為直接返回右子列的值。我們只需要考慮左子列的最大和以及跨越了左右的中子列的最大值。所以我們需要記錄兩個(gè)值,第一個(gè)是當(dāng)前最大和,還有一個(gè)是到nums[n-1]的最大子列和。

    public int maxSubArray(int[] A) {
        int n = A.length;
        //存儲(chǔ)經(jīng)過(guò)下標(biāo)為i的最大子數(shù)列和,用于判斷中子列
        int[] dp = new int[n];
        dp[0] = A[0];
        int max = dp[0];
        
        for(int i = 1; i < n; i++){
            dp[i] = A[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);
            max = Math.max(max, dp[i]);
        }
        return max;    
    }


想要了解更多開(kāi)發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67022.html

相關(guān)文章

  • leetcode_53 Maximum Subarray

    摘要:如果單開(kāi)元素加和更大判斷前面的子數(shù)組和是不是小于。此元素就成為了子數(shù)組的第一個(gè)元素。每次操作都要判斷,當(dāng)前是否是最大值,更新值。 題目詳情 Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given t...

    y1chuan 評(píng)論0 收藏0
  • 動(dòng)態(tài)規(guī)劃法(八)最大數(shù)組問(wèn)題(maximum subarray problem)

    摘要:動(dòng)態(tài)規(guī)劃法用表示最大子數(shù)組的結(jié)束下標(biāo)為的情形,則對(duì)于,有這樣就有了一個(gè)子結(jié)構(gòu),對(duì)于初始情形,遍歷就能得到這個(gè)數(shù)組,其最大者即可最大子數(shù)組的和。動(dòng)態(tài)規(guī)劃法想法巧妙,運(yùn)行效率也高,但是沒(méi)有普遍的適用性。 問(wèn)題簡(jiǎn)介 ??本文將介紹計(jì)算機(jī)算法中的經(jīng)典問(wèn)題——最大子數(shù)組問(wèn)題(maximum subarray problem)。所謂的最大子數(shù)組問(wèn)題,指的是:給定一個(gè)數(shù)組A,尋找A的和最大的非空連續(xù)...

    jzman 評(píng)論0 收藏0
  • [Leetcode] Maximum Subarray 序列最大

    摘要:最新更新請(qǐng)見(jiàn)原題鏈接動(dòng)態(tài)規(guī)劃復(fù)雜度時(shí)間空間思路這是一道非常典型的動(dòng)態(tài)規(guī)劃題,為了求整個(gè)字符串最大的子序列和,我們將先求較小的字符串的最大子序列和。而最大子序列和的算法和上個(gè)解法還是一樣的。 Maximum Subarray 最新更新請(qǐng)見(jiàn):https://yanjia.me/zh/2019/02/... Find the contiguous subarray within an ar...

    summerpxy 評(píng)論0 收藏0
  • 前端 | 每天一個(gè) LeetCode

    摘要:在線網(wǎng)站地址我的微信公眾號(hào)完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個(gè)題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語(yǔ)言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號(hào): showImg(htt...

    張漢慶 評(píng)論0 收藏0
  • leetcode152 Maximum Product Subarray

    摘要:題目要求從一個(gè)整數(shù)數(shù)組中找到一個(gè)子數(shù)組,該子數(shù)組中的所有元素的乘積最大。比如數(shù)組的最大乘積子數(shù)組為思路與代碼這題目考察了動(dòng)態(tài)編程的思想。至于為什么還要比較,是因?yàn)槿绻且粋€(gè)負(fù)數(shù)的,那么之前的最小乘積在這里可能就成為了最大的乘積了。 題目要求 Find the contiguous subarray within an array (containing at least one num...

    Arno 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<