import java.util.HashMap ;
public class Main {
public static void main
( String [ ] args
) { int [ ] A = { 0 , 1 , 2 , 3 } ; // Using 1-based indexing layout
int [ ] B = { 0 , 2 , 1 , 3 } ;
int n = 3 ;
int [ ] prefixA = new int [ n + 1 ] ;
int [ ] prefixB = new int [ n + 1 ] ;
// Step 1: Build prefix sums
for ( int i = 1 ; i <= n; i++ ) {
prefixA[ i] = prefixA[ i - 1 ] + A[ i] ;
prefixB[ i] = prefixB[ i - 1 ] + B[ i] ;
}
//Here, instead of looking for a constant K, we are looking for a subarray where Sum of A = Sum of B.
//If you subtract the sum of B from the sum of A, you get:Sum of A - Sum of B = 0
// Step 2: Use HashMap to track first occurrence of (prefixA[k] - prefixB[k])
HashMap
< Integer , Integer
> firstOccurrence
= new HashMap
<> ( ) ; int maxG = 0 ;
for ( int j = 0 ; j <= n; j++ ) {
int diff = prefixA[ j] - prefixB[ j] ;
if ( firstOccurrence.containsKey ( diff) ) {
int prevIndex = firstOccurrence.get ( diff) ;
int currentLength = j - prevIndex;
maxG
= Math .
max ( maxG, currentLength
) ; } else {
// Store the earliest index to maximize length
firstOccurrence.put ( diff, j) ;
}
}
System .
out .
println ( "Max length G: " + maxG
) ; }
}
aW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIGludFtdIEEgPSB7MCwgMSwgMiwgM307IC8vIFVzaW5nIDEtYmFzZWQgaW5kZXhpbmcgbGF5b3V0CiAgICAgICAgaW50W10gQiA9IHswLCAyLCAxLCAzfTsKICAgICAgICBpbnQgbiA9IDM7CgogICAgICAgIGludFtdIHByZWZpeEEgPSBuZXcgaW50W24gKyAxXTsKICAgICAgICBpbnRbXSBwcmVmaXhCID0gbmV3IGludFtuICsgMV07CgogICAgICAgIC8vIFN0ZXAgMTogQnVpbGQgcHJlZml4IHN1bXMKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgcHJlZml4QVtpXSA9IHByZWZpeEFbaSAtIDFdICsgQVtpXTsKICAgICAgICAgICAgcHJlZml4QltpXSA9IHByZWZpeEJbaSAtIDFdICsgQltpXTsKICAgICAgICB9CiAgICAgICAgLy9IZXJlLCBpbnN0ZWFkIG9mIGxvb2tpbmcgZm9yIGEgY29uc3RhbnQgSywgd2UgYXJlIGxvb2tpbmcgZm9yIGEgc3ViYXJyYXkgd2hlcmUgU3VtIG9mIEEgPSBTdW0gb2YgQi4KICAgICAgICAvL0lmIHlvdSBzdWJ0cmFjdCB0aGUgc3VtIG9mIEIgZnJvbSB0aGUgc3VtIG9mIEEsIHlvdSBnZXQ6U3VtIG9mIEEgLSBTdW0gb2YgQiA9IDAKICAgICAgICAvLyBTdGVwIDI6IFVzZSBIYXNoTWFwIHRvIHRyYWNrIGZpcnN0IG9jY3VycmVuY2Ugb2YgKHByZWZpeEFba10gLSBwcmVmaXhCW2tdKQogICAgICAgIEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4gZmlyc3RPY2N1cnJlbmNlID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIGludCBtYXhHID0gMDsKCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gbjsgaisrKSB7CiAgICAgICAgICAgIGludCBkaWZmID0gcHJlZml4QVtqXSAtIHByZWZpeEJbal07CgogICAgICAgICAgICBpZiAoZmlyc3RPY2N1cnJlbmNlLmNvbnRhaW5zS2V5KGRpZmYpKSB7CiAgICAgICAgICAgICAgICBpbnQgcHJldkluZGV4ID0gZmlyc3RPY2N1cnJlbmNlLmdldChkaWZmKTsKICAgICAgICAgICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0gaiAtIHByZXZJbmRleDsKICAgICAgICAgICAgICAgIG1heEcgPSBNYXRoLm1heChtYXhHLCBjdXJyZW50TGVuZ3RoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBlYXJsaWVzdCBpbmRleCB0byBtYXhpbWl6ZSBsZW5ndGgKICAgICAgICAgICAgICAgIGZpcnN0T2NjdXJyZW5jZS5wdXQoZGlmZiwgaik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWF4IGxlbmd0aCBHOiAiICsgbWF4Ryk7CiAgICB9Cn0=