第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

獲取循環(huán)有序數(shù)組中所有正數(shù)的總和,時(shí)間復(fù)雜度為 O(Log N)

獲取循環(huán)有序數(shù)組中所有正數(shù)的總和,時(shí)間復(fù)雜度為 O(Log N)

一只斗牛犬 2023-09-20 17:34:14
我在課堂上得到了一個(gè)練習(xí),需要以下內(nèi)容:由 N 個(gè)整數(shù)組成的數(shù)組 v 是循環(huán)排序的,如果該數(shù)組是有序的,或者 和v[N‐1] ≤ v[0],?k例如0<k<N。?i≠k v[i] ≤ v[i+1]例子:給定一個(gè)包含多達(dá) 10 個(gè)正項(xiàng)的循環(huán)排序數(shù)組,計(jì)算正值的總和。對(duì)于最后一個(gè)例子,答案是 27。我被要求在java中使用分而治之的方案來(lái)實(shí)現(xiàn)它,因?yàn)樽顗那闆r下的復(fù)雜性是O(Log N),即 N 是數(shù)組大小。到目前為止,我嘗試旋轉(zhuǎn)一個(gè)值,直到找到一個(gè)正值,然后知道其他正值是相鄰的,就可以以 O(1) 的復(fù)雜度對(duì) 10 個(gè)正值的最大值進(jìn)行求和。我想過(guò)進(jìn)行二分搜索來(lái)實(shí)現(xiàn) O(Log N) 復(fù)雜度,但這不遵循分而治之的模式。我可以輕松地通過(guò) O(N) 復(fù)雜度來(lái)實(shí)現(xiàn)它,如下所示:public static int addPositives(int[] vector){    return addPositives(vector,0,vector.length-1}public static int addPositives(int[] vector, int i0, int iN){    int k = (i0+iN)/2;    if (iN-i0 > 1){        return addPositives(vector,i0,k) + addPositives(vector,k+1,iN);    }else{        int temp = 0;        for (int i = i0; i <= iN; i++) {            if (vector[i]>0) temp+=vector[i];        }        return temp;    }}然而,試圖達(dá)到 O(Log N) 卻毫無(wú)進(jìn)展,我該如何實(shí)現(xiàn)呢?
查看完整描述

2 回答

?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

如果您修剪遞歸的不相關(guān)分支,則可以改進(jìn)分而治之的實(shí)現(xiàn)以滿(mǎn)足所需的運(yùn)行時(shí)間。

將當(dāng)前數(shù)組分為兩個(gè)子數(shù)組后,比較每個(gè)子數(shù)組的第一個(gè)和最后一個(gè)元素。如果兩者都是負(fù)數(shù)并且第一個(gè)小于最后一個(gè),您可以確定該子數(shù)組中的所有元素都是負(fù)數(shù),并且您不必對(duì)其進(jìn)行遞歸調(diào)用(因?yàn)槟浪鼘?0 貢獻(xiàn))總金額)。

如果子數(shù)組中的所有元素都是正數(shù),您也可以停止遞歸(也可以通過(guò)比較子數(shù)組的第一個(gè)和最后一個(gè)元素來(lái)驗(yàn)證) - 在這種情況下,您必須將該子數(shù)組的所有元素相加-array,所以沒(méi)有必要繼續(xù)遞歸。


查看完整回答
反對(duì) 回復(fù) 2023-09-20
?
交互式愛(ài)情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

我對(duì) O(Log N) 的建議是直接比較以滿(mǎn)足兩個(gè)標(biāo)準(zhǔn)中的第二個(gè):最后一項(xiàng)小于第一項(xiàng)。 return vector[0] >= vector[iN-1]

如果你想要更復(fù)雜的東西,我忘記了算法名稱(chēng),但你可以在中間點(diǎn)獲取數(shù)組,并從那里進(jìn)行兩次有序搜索:從中間到開(kāi)始,然后從中間到結(jié)束


查看完整回答
反對(duì) 回復(fù) 2023-09-20
  • 2 回答
  • 0 關(guān)注
  • 127 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)