国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

1749. 任意子數(shù)組和的絕對(duì)值的最大值

這篇具有很好參考價(jià)值的文章主要介紹了1749. 任意子數(shù)組和的絕對(duì)值的最大值。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

諸神緘默不語-個(gè)人CSDN博文目錄
力扣刷題筆記

1749. 任意子數(shù)組和的絕對(duì)值的最大值,編程學(xué)習(xí)筆記,力扣,LeetCode,算法,算法與數(shù)據(jù)結(jié)構(gòu)

1749. 任意子數(shù)組和的絕對(duì)值的最大值,編程學(xué)習(xí)筆記,力扣,LeetCode,算法,算法與數(shù)據(jù)結(jié)構(gòu)

1. 暴力搜索

直接用2個(gè)指針從索引0開始找到最后一個(gè)索引,時(shí)間復(fù)雜度大概是 O ( n 2 ) O(n^2) O(n2)吧,總之這么搞不行,以下是我用Python寫的一些典型失敗案例

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        max_abs=0
        nums_len=len(nums)
        for pointer1 in range(nums_len):
            for pointer2 in range(pointer1,nums_len):
                sub_nums=nums[pointer1:pointer2+1]
                max_abs=max(max_abs,abs(sum(sub_nums)))
        return max_abs

↑會(huì)超時(shí),這個(gè)我覺得應(yīng)該是sum()的問題,所以做了改進(jìn):

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        sum_table=[[0 for _ in range(len(nums))] for _ in range(len(nums))]
        for i in range(len(nums)):
            sum_table[i][i]=nums[i]
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                sum_table[i][j]=sum_table[i][j-1]+nums[j]
        max_abs=0
        for i in sum_table:
            for j in i:
                max_abs=max(max_abs,abs(j))
        return max_abs

↑這個(gè)又會(huì)爆內(nèi)存,我罵罵咧咧。
這個(gè)我一開始猜是因?yàn)?太多了,所以把所有一直都是0的部分給刪除了:

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        sum_table=[[0 for _ in range(len(nums)-i)] for i in range(len(nums))]
        for i in range(len(nums)):
            sum_table[i][0]=nums[i]
        for i in range(len(nums)):
            for j in range(1,len(nums)-i):
                sum_table[i][j]=sum_table[i][j-1]+nums[j+i]
        max_abs=0
        for i in sum_table:
            for j in i:
                max_abs=max(max_abs,abs(j))
        return max_abs

↑還是會(huì)爆內(nèi)存
繼續(xù)縮:

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        max_abs=0
        for i in range(len(nums)):
            pre_sum=nums[i]
            max_abs=max(max_abs,abs(pre_sum))
            for j in range(i+1,len(nums)):
                pre_sum=pre_sum+nums[j]
                max_abs=max(max_abs,abs(pre_sum))
        return max_abs

這回超時(shí)了

2. 動(dòng)態(tài)規(guī)劃

然后我就去看題解了。

來自官方題解:https://leetcode.cn/problems/maximum-absolute-sum-of-any-subarray/solutions/2372374/ren-yi-zi-shu-zu-he-de-jue-dui-zhi-de-zu-qerr/

在一組數(shù)字中絕對(duì)值的最大值,可能是最大的值的絕對(duì)值,也可能是最小值的絕對(duì)值。
所以找子數(shù)組和絕對(duì)值的最大值,就要找最大的子數(shù)組和,和最小的子數(shù)組和。
所以解決方案是分別計(jì)算這兩種情況:在找最大的子數(shù)組和時(shí),遍歷數(shù)組,保留到上一個(gè)數(shù)字為止的全局子數(shù)組最大和global_max+有上一個(gè)數(shù)字在的子數(shù)組的最大和sumable_max或者0(0的意思就是甩掉上一個(gè)數(shù)字),如果新數(shù)字+sumable_max比positiveMax還高,就更新global_max;如果這個(gè)數(shù)字加進(jìn)sumable_max大于0了,那對(duì)后續(xù)數(shù)字而言,加sumable_max是可以更大的(我在說什么,反正就是這個(gè)意思),否則不如直接重開。
找最小的子數(shù)組和時(shí)就完全反過來:保留全局最小和global_min+可加最小和sumable_min或0,如果新數(shù)字+sumable_min<global_min就更新global_min;如果新數(shù)字+sumable_min>0那就白給,立刻重開。

時(shí)間復(fù)雜度 O ( n ) O(n) O(n),空間復(fù)雜度 O ( 1 ) O(1) O(1)

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        global_max=0
        sumable_max=0
        global_min=0
        sumable_min=0
        for i in nums:
            sumable_max+=i
            global_max=max(global_max,sumable_max)
            sumable_max=max(0,sumable_max)
            
            sumable_min+=i
            global_min=min(global_min,sumable_min)
            sumable_min=min(0,sumable_min)
        return max(abs(global_max),abs(global_min))

官方Java代碼:

class Solution {
    public int maxAbsoluteSum(int[] nums) {
        int positiveMax = 0, negativeMin = 0;
        int positiveSum = 0, negativeSum = 0;
        for (int num : nums) {
            positiveSum += num;
            positiveMax = Math.max(positiveMax, positiveSum);
            positiveSum = Math.max(0, positiveSum);
            negativeSum += num;
            negativeMin = Math.min(negativeMin, negativeSum);
            negativeSum = Math.min(0, negativeSum);
        }
        return Math.max(positiveMax, -negativeMin);
    }
}

3. 前綴和

前綴和指的是在數(shù)組最前面加個(gè)0,從第1個(gè)數(shù)字到當(dāng)前數(shù)字的和,任何子數(shù)組和顯然都是某2個(gè)前綴和的差值,最大的子數(shù)組和絕對(duì)值顯然就是最大前綴和-最小前綴和(如果最小值<0就直接是最大值-最小值,如果最小值>0就用那個(gè)0)

Python 3有內(nèi)置函數(shù):

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        s = list(accumulate(nums, initial=0))  # nums 的前綴和
        return max(s) - min(s)

Java實(shí)現(xiàn)的示例:文章來源地址http://www.zghlxwxcb.cn/news/detail-638093.html

class Solution {
    public int maxAbsoluteSum(int[] nums) {
        int n=nums.length;
        int pre=0;
        int max=0;
        int min=0;
        for(int i=0;i<n;i++){
            pre+=nums[i];
            max=Math.max(max,pre);
            min=Math.min(min,pre);
        }
        return max-min;
    }
}

到了這里,關(guān)于1749. 任意子數(shù)組和的絕對(duì)值的最大值的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python中計(jì)算絕對(duì)值fabs()函數(shù)

    Python中計(jì)算絕對(duì)值fabs()函數(shù)

    選擇題 請(qǐng)問以下Python代碼輸出的結(jié)果是什么? import math A = -10 B = 10 print(math.fabs(A)) print(math.fabs(B)) 選項(xiàng): A 10.0 10.0 B -10.0 10.0 C 10.0 -10.0 D -10.0 -10.0 問題解析: 1.fabs()的功能是:返回?cái)?shù)字的絕對(duì)值。 2.使用fabs()需要先導(dǎo)入math模塊,通過math.fabs()調(diào)用該方法。 3.題目中A為負(fù)數(shù),ma

    2023年04月09日
    瀏覽(18)
  • Eigen 對(duì)矩陣的每個(gè)元素取絕對(duì)值

    ??使用Eigen庫對(duì)矩陣的每一個(gè)元素進(jìn)行取絕對(duì)值操作非常簡(jiǎn)單。可以使用array()函數(shù)將矩陣轉(zhuǎn)換為數(shù)組,然后使用abs()函數(shù)對(duì)數(shù)組中的每個(gè)元素取絕對(duì)值,最后使用matrix()函數(shù)將數(shù)組轉(zhuǎn)換回矩陣。下面是一個(gè)示例代碼:

    2024年02月04日
    瀏覽(34)
  • 【MATLAB】線性規(guī)劃問題中的絕對(duì)值問題

    【MATLAB】線性規(guī)劃問題中的絕對(duì)值問題

    在求解線性規(guī)劃問題中碰到絕對(duì)值的情況: m i n z = ∣ x 1 ∣ + 2 ∣ x 2 ∣ + 3 ∣ x 3 ∣ + 4 ∣ x 4 ∣ , min z=|x_1|+2|x_2|+3|x_3|+4|x_4|, min z = ∣ x 1 ? ∣ + 2∣ x 2 ? ∣ + 3∣ x 3 ? ∣ + 4∣ x 4 ? ∣ , s . t . { x 1 ? x 2 ? x 3 + x 4 = 0 , x 1 ? x 2 + x 3 ? 3 x 4 = 1 , x 1 ? x 2 ? 2 x 3 + 3 x 4 = ? 1 2

    2023年04月09日
    瀏覽(30)
  • 概率論習(xí)題之標(biāo)準(zhǔn)正態(tài)絕對(duì)值的期望

    一、主要注意的點(diǎn) E ∣ X ∣ = 2 Π 計(jì)算 : E ∣ X ∣ = ∫ ? ∞ + ∞ ∣ X ∣ f ( x ) d x E Z = E ∣ x ? μ ∣ E|X|={sqrt{frac{2}{Pi}} }\\\\ 計(jì)算:E|X|=displaystyle int^{+infty}_{-infty}{|X|f(x)dx}\\\\ EZ=E|x-mu| E ∣ X ∣ = Π 2 ? ? 計(jì)算 : E ∣ X ∣ = ∫ ? ∞ + ∞ ? ∣ X ∣ f ( x ) d x EZ = E ∣ x ? μ ∣ 二、

    2024年03月14日
    瀏覽(21)
  • Leetcode19-差的絕對(duì)值為K的數(shù)對(duì)數(shù)目(2006)

    Leetcode19-差的絕對(duì)值為K的數(shù)對(duì)數(shù)目(2006)

    給你一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù) k ,請(qǐng)你返回?cái)?shù)對(duì) (i, j) 的數(shù)目,滿足 i j 且 |nums[i] - nums[j]| == k 。 |x| 的值定義為: 如果 x = 0 ,那么值為 x 。 如果 x 0 ,那么值為 -x 。 示例 1: 輸入:nums = [1,2,2,1], k = 1 輸出:4 解釋:差的絕對(duì)值為 1 的數(shù)對(duì)為: [1,2,2,1] [1,2,2,1] [1,2,2,1] [1,

    2024年01月15日
    瀏覽(21)
  • C++力扣題目530--二叉搜索樹的最小絕對(duì)值

    C++力扣題目530--二叉搜索樹的最小絕對(duì)值

    給你一個(gè)二叉搜索樹的根節(jié)點(diǎn)? root ?,返回? 樹中任意兩不同節(jié)點(diǎn)值之間的最小差值 ?。 差值是一個(gè)正數(shù),其數(shù)值等于兩值之差的絕對(duì)值。 示例 1: 示例 2: 樹中節(jié)點(diǎn)的數(shù)目范圍是? [2, 104] 0 = Node.val = 105 題目中要求在二叉搜索樹上任意兩節(jié)點(diǎn)的差的絕對(duì)值的最小值。 注意

    2024年02月02日
    瀏覽(24)
  • C# Math和Mathf的使用(小數(shù)取整、四舍五入、取絕對(duì)值等)

    在C#中我們做一些數(shù)學(xué)計(jì)算時(shí),常會(huì)見到Math和Mathf的使用。到底使用哪個(gè),它們有什么區(qū)別? 首先了解下它們的定義: Math:是C#中封裝好的用于數(shù)學(xué)計(jì)算的一個(gè)工具類,命名空間是System; Mathf:是Unity中封裝好的用于數(shù)學(xué)計(jì)算的一個(gè)工具結(jié)構(gòu)體,命名空間是UnityEngine。 事實(shí)上,

    2024年02月07日
    瀏覽(28)
  • 倍福位置記憶--TwinCAT對(duì)絕對(duì)值編碼器溢出圈數(shù)的處理--以匯川IS620N為例

    倍福位置記憶--TwinCAT對(duì)絕對(duì)值編碼器溢出圈數(shù)的處理--以匯川IS620N為例

    首先配置伺服,如下所示: 根據(jù)伺服手冊(cè)和編碼器反饋的數(shù)值可知,其每轉(zhuǎn)脈沖數(shù),和最大的記憶圈數(shù): 型號(hào):IS620N 編碼器位數(shù):8388608 最大:2149498568 最?。?2149498568 推出最大圈數(shù)為256 2=512圈 因此可以得到 匯川編碼器結(jié)構(gòu)組成: 共32位:其中精度站23位,圈數(shù)占9位,所以

    2024年02月14日
    瀏覽(31)
  • 【華為OD統(tǒng)一考試B卷 | 100分】亂序整數(shù)序列兩數(shù)之和絕對(duì)值最?。–++ Java JavaScript Python)

    華為OD統(tǒng)一考試A卷+B卷 新題庫說明 2023年5月份,華為官方已經(jīng)將的 2022/0223Q(1/2/3/4)統(tǒng)一修改為OD統(tǒng)一考試(A卷)和OD統(tǒng)一考試(B卷)。 你收到的鏈接上面會(huì)標(biāo)注A卷還是B卷。請(qǐng)注意:根據(jù)反饋,目前大部分收到的都是B卷。但是仍有概率抽到A卷。 A卷對(duì)應(yīng)2023的新題庫(2022Q4 2

    2024年02月09日
    瀏覽(18)
  • MT6701磁編碼器使用指南,14Bit單圈絕對(duì)值,I2C stm32 HAL庫讀角度,兼容AS5600

    MT6701磁編碼器使用指南,14Bit單圈絕對(duì)值,I2C stm32 HAL庫讀角度,兼容AS5600

    ??MT6701是麥歌恩(MagnTek)公司的磁性角度傳感器芯片,提供14Bit 0~360°單圈絕對(duì)角度檢測(cè),擁有 ABZ/PWM/模擬量/I2C/SSI 等多種信息輸出方式,還可根據(jù)磁場(chǎng)強(qiáng)度的瞬時(shí)變化提供非接觸式按壓檢測(cè)功能。能夠以較低的成本來替代傳統(tǒng)光電編碼器,可應(yīng)用于絕對(duì)值角度輸出、閉環(huán)

    2024年02月02日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包