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

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

從數(shù)組中找到元素的最低絕對(duì)和

從數(shù)組中找到元素的最低絕對(duì)和

慕斯709654 2021-05-05 16:33:11
我嘗試從下面提供的Codility中了解一個(gè)問題的解決方案,對(duì)于給定的具有N個(gè)整數(shù)的數(shù)組A和來自集合{?1,1}的N個(gè)整數(shù)的序列S,我們定義val(A,S)如下:val(A, S) = |sum{ A[i]*S[i] for i = 0..N?1 }|(假設(shè)零個(gè)元素的總和等于零。)對(duì)于給定的數(shù)組A,我們正在尋找使val(A,S)最小的序列S。編寫一個(gè)函數(shù):class Solution { public int solution(int[] A); }在給定N個(gè)整數(shù)的數(shù)組A的情況下,對(duì)于集合{-1,1}中N個(gè)整數(shù)的所有可能序列S,從val(A,S)的所有可能值中計(jì)算val(A,S)的最小值。例如,給定數(shù)組:  A[0] =  1  A[1] =  5  A[2] =  2  A[3] = -2您的函數(shù)應(yīng)返回0,因?yàn)閷?duì)于S = [?1,1,--1,1],val(A,S)= 0,這是可能的最小值。假使,假設(shè):N is an integer within the range [0..20,000];each element of array A is an integer within the range [?100..100].Complexity:預(yù)期的最壞情況時(shí)間復(fù)雜度為O(N * max(abs(A))2); 預(yù)期的最壞情況下的空間復(fù)雜度為O(N + sum(abs(A)))(不計(jì)算輸入?yún)?shù)所需的存儲(chǔ)空間)。我有最近幾個(gè)小時(shí)想要了解的解決方案。public static int solution(int[] A) {        int N = A.length;        int sum = 0;        int max = 0;        for (int i = 0; i < N; i++) {            A[i] = Math.abs(A[i]);            sum += A[i];            max = Math.max(A[i], max);        }        int[] counts = new int[max + 1];        for (int i = 0; i < N; i++) {            counts[A[i]] += 1;        }        int[] Total = new int[sum + 1];        Arrays.fill(Total, -1);        Total[0] = 0;        // Segment I        for (int i = 1; i <= max; i++) {            if (counts[i] > 0) {                for (int j = 0; j <= sum; j++) {                    // j th index is zero or positive                    if (Total[j] >= 0) {                        Total[j] = counts[i];                    }                    // (i-j) th index is positive                    else if ((j - i) >= 0 && Total[j - i] > 0) {                        Total[j] = Total[j - i] - 1;                    }                }            }        }如果任何人都可以解釋循環(huán)的最后兩個(gè)部分中發(fā)生了什么,這將非常有幫助。我只想在幾行文字中找到一個(gè)簡短的解釋。
查看完整描述

1 回答

?
慕村225694

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

為了使總和具有必需的屬性,可以找到總和盡可能接近總和一半的數(shù)組A的子集。

這是一種眾所周知的方法 subset sum problem,可以通過動(dòng)態(tài)編程方法解決,方法是使用尺寸對(duì)應(yīng)于總和的附加數(shù)組(請注意數(shù)組Total)。

請注意,問題的解決方案僅處理正數(shù),因此您必須對(duì)其進(jìn)行修改以使用負(fù)數(shù)(例如您的示例A[3] = -2)。

此代碼使數(shù)組total的長度變長,sum+1并保存array中每個(gè)值的計(jì)數(shù)counts。

在第一階段,代碼將所有可能總和的非整數(shù)項(xiàng)填充到總表中。考慮簡單的set value:count (2:3; 3:2)。
第一輪以值3,2,1,0填充條目0,2,4,6。第二輪將所有非負(fù)條目更改為三分之二,并
從非負(fù)條目構(gòu)建鏈的遞減序列(例如4--> 4+3 ->4+6)。在那之后,我們得到了總數(shù)組,[2,-1,2,1,2,1,2,1,0,1,0,-1,0]其中負(fù)條目(不可能的總和)為1,11。請注意,這種方法不存儲(chǔ)信息-使用了哪些項(xiàng)目來產(chǎn)生所有可能的總和,因此您必須進(jìn)行更多的修改。


查看完整回答
反對(duì) 回復(fù) 2021-05-26
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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