在Java中,將陣列分割為基於給定查詢的子數組後,找到子數組的最大子數組和
我們有兩個整數數組,一個具有計算的元素,另一個具有分割數組以產生子集所需的分割點,我們必須計算每個分割中每個子集的總和並傳回最大子集
讓我們透過範例來理解:-
#輸入− int arr[] = int arr[] = { 9, 4, 5, 6 , 7 } int splitPoints[] = { 0, 2, 3, 1 };
輸出− 每次分割後的最大子數組和[22, 13, 9 , 9]
解釋− 這裡我們根據陣列的分割點來分解數組,並在每次分割後得到最大子集和
第一次分割後 strong> → {9} 和{4,5,6,7} >> 最大子數組總和為- 22
第二次分割後 → {9} , {4,5 } 和{6,7} >> 最大子數組和為- 13
第三次分割後 →{9}、{4,5}、{ 6} 和{7} >> 最大子數組和為- 9
第四次分割後 →{9}、{4}、{5}、{6} 和{ 7} >> 最大子數組和is- 9
輸入−int arr[] = int arr[] = { 7, 8, 5, 9, 1 } int splitPoints[] = { 1, 2, 0, 3 };
輸出−每次分割後的最大子陣列和[15, 115, 10, 9]
#解釋−這裡我們根據數組的分割點來分解數組,並在每次分割後得到最大子集和
##第一次分割後 → {7, 8} 和{5,9 ,1} >> 最大子數組和為15
第二個分割後 → {7,8}、{5} 和{9,1 } >> 最大子數組和為115
第三次分割後 →{7}、{8}、{5} 和{9,1} >> 最大子數組總和為10
第四次分割後 →{7}、{8}、{5}、{9} 和{1} >> 最大子數組和為9
以下程式中使用的方法是如下-- 我們將從main() 方法開始
- 輸入數組任何給定長度,例如arr[] 和splitPoints[]。計算它們的長度並以calculateSubsetSum(arr.length, splitPoints.length, splitPoints, arr)的形式傳遞給方法。
- 在方法calculateSubsetSum中()
- 建立一個整數陣列作為sum[],並將sum[0 ] 設定為arr[0]。
- 開始循環FOR 從i 到1 直到陣列的長度,並將sum[i] 設為sum[i - 1] arr[i] 並將temp[0] 設為new subSets(0, n - 1, sum[n - 1])。
- 繼續加入t2.add(temp[0]) 和t1.add(0)
- 從i 到0 開始循環FOR,直到splitPoints 陣列的長度。在循環內部將currentSplitPoint 設為t1.floor(splitPoints[i]) 並從t2 中刪除為t2.remove(temp[currentSplitPoint])
- #將將 設為temp[currentSplitPoint ] .last 與temp[currentSplitPoint] 作為新的subSets(currentSplitPoint, splitPoints[i], sum[splitPoints[i]] - (currentSplitPoint == 0 ? 0 : sum[currentSplitPoint - 1])) ##使用t2.add(temp[currentSplitPoint]) 和temp[splitPoints[i] 1] = new subSets(splitPoints[i] 1, end, sum[end] - sum[splitPoints[i] 新增] ])
- 使用t2.add(temp[splitPoints[i] 1])、t1.add(currentSplitPoint) 和t1.add(splitPoints[i] 進行新增1)
- 列印t2.first() 值。
建立一個類別類別subSets 並宣告first、last和value作為其資料成員,並將預設建構子定義為subSets(int f, int l, int v),並將first設為f,last設為l,value設定為v -
- #建立一個公共方法作為比較並檢查IF s2.value 不等於到s1.value,然後返回s2.value - s1.value。
- 檢查s1.first 是否不等於s2.first,然後回傳s2.first - s1.first
p>
範例
import java.io.IOException; import java.io.InputStream; import java.util.*; class utilityComparator implements Comparator<subSets>{ public int compare(subSets s1, subSets s2){ if(s2.value != s1.value){ return s2.value - s1.value; } if(s1.first != s2.first){ return s2.first - s1.first; } return 0; } } class subSets{ int first; int last; int value; subSets(int f, int l, int v){ first = f; last = l; value = v; } } public class testClass{ static void calculateSubsetSum(int n, int k, int splitPoints[], int arr[]){ int sum[] = new int[n]; sum[0] = arr[0]; for (int i = 1; i < n; i++){ sum[i] = sum[i - 1] + arr[i]; } TreeSet<Integer> t1 = new TreeSet<>(); TreeSet<subSets> t2 = new TreeSet<>(new utilityComparator()); subSets temp[] = new subSets[n]; temp[0] = new subSets(0, n - 1, sum[n - 1]); t2.add(temp[0]); t1.add(0); System.out.println("Maximum subarray sum after each split"); for (int i = 0; i < k; i++){ int currentSplitPoint = t1.floor(splitPoints[i]); t2.remove(temp[currentSplitPoint]); int end = temp[currentSplitPoint].last; temp[currentSplitPoint] = new subSets(currentSplitPoint, splitPoints[i], sum[splitPoints[i]] - (currentSplitPoint == 0 ? 0 : sum[currentSplitPoint - 1])); t2.add(temp[currentSplitPoint]); temp[splitPoints[i] + 1] = new subSets(splitPoints[i] + 1, end, sum[end] - sum[splitPoints[i]]); t2.add(temp[splitPoints[i] + 1]); t1.add(currentSplitPoint); t1.add(splitPoints[i] + 1); System.out.println(t2.first().value); } } public static void main(String[] args){ int arr[] = { 2, 1, 6, 8, 5, 10, 21, 13}; int splitPoints[] = { 3, 1, 2, 0, 4, 5 }; calculateSubsetSum(arr.length, splitPoints.length, splitPoints, arr); } }
輸出
如果我們執行上面的程式碼,它將產生以下輸出
Maximum subarray sum after each split 49 49 49 49 44 34
以上是在Java中,將陣列分割為基於給定查詢的子數組後,找到子數組的最大子數組和的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

我們有兩個整數數組,一個具有計算的元素,另一個具有分割數組以產生子集所需的分割點,我們必須計算每個分割中每個子集的總和並返回最大子集讓我們通過示例來理解:-輸入−intarr[]=intarr[]={9,4,5,6,7}intsplitPoints[]={0,2,3,1};輸出−每次分割後的最大子數組和[ 22,13,9,9]解釋−這裡我們根據數組的分割點來分解數組,並在每次分割後獲得最大子集和第一次分割後→{9}和{4,5,6,7 }>>最大子數組總和為-22第二次分割後→{9},{4

在本文中,我們將使用C++解決尋找最大值和最小值相同的子數組數量的問題。以下是該問題的範例−Input:array={2,3,6,6,2,4,4,4}Output:12Explanation:{2},{3},{6},{6},{2 },{4},{4},{4},{6,6},{4,4},{4,4}and{4,4,4}arethesubarrayswhichcanbeformedwithmaximumandminimumelementsame.Input:array={3,3, 1,5,

在這篇文章中,我們將使用C++找出具有小於K的和的子陣列的數量。在這個問題中,我們有一個陣列arr[]和一個整數K。現在我們需要找出和小於K的子數組。以下是範例−Input:arr[]={1,11,2,3,15}K=10Output:4{1},{2},{3}and{2,3}尋找解決方案的方法現在我們將使用兩種不同的方法來解決給定的問題-暴力破解在這種方法中,我們將迭代遍歷所有子數組併計算它們的總和,如果總和小於k,則與k進行比較,以增加我們的答案。範例#include<

我們得到一個包含整數值的陣列Arr[]。目標是找到XOR為0的子數組的最大數量。任何子數組的位元都可以交換任意次數。注意:-1

數組是一組相似的資料集合,以連續的方式儲存在相鄰的記憶體位置上。透過將偏移值定義為資料庫的特定基值,可以更容易地評估每個元素的特定位置。此特定索引的基底值為零,偏移值是兩個特定索引之間的差值。子數組是特定數組的一部分,可以定義為一組變量,具有多個值的標籤。最長的子數組指的是數組中所有元素都大於K的數組。這裡最大和子數組的和為-給定資料集中的少於等於給定的資料集。給定資料集中的少於要找到最長子數組的長度,我們只需要找出特定子數組中1的總數。注意:計數應該大於零的計數。最大公約數是一種數學現象,在其中我

子數組是數組的連續部分。例如,我們考慮一個數組[5,6,7,8],那麼有十個非空子數組,如(5),(6),(7),(8),(5,6),(6, 7)、(7,8)、(5,6,7)、(6,7,8)和(5,6,7,8)。在本指南中,我們將解釋在C++中尋找所有可能的資訊來尋找具有奇數和的子數組的數量。為了找到奇數和的子數組的數量,我們可以使用不同的方法,所以這裡是一個簡單的例子-Input:array={9,8,7,6,5}Output:9Explanation:Sumofsubarray-{9}= 9{7

PHP數組是一種非常常用的資料結構,在開發中經常涉及對數組的合併和分割操作。本文將介紹如何使用PHP語言實作這兩種操作,並附上對應的程式碼範例。一、合併數組合併數組的運算可以使用array_merge()函數來實現。此函數接受多個陣列作為參數,並將它們合併成一個新的陣列。程式碼範例:$array1=["apple","ba

在本文中,我們將描述尋找子數組中素數數量的方法。我們有一個正數數組arr[]和q個查詢,其中有兩個整數表示我們的範圍{l,R},我們需要找到給定範圍內的素數數量。以下是給定問題的例子-Input:arr[]={1,2,3,4,5,6},q=1,L=0,R=3Output:2Inthegivenrangetheprimesare{2,3}.Input:arr []={2,3,5,8,12,11},q=1,L=0,R=5Output:4Inthegivenrangetheprimesare{2,3,5
