/* Java program to find length of the largest subarray which has
all contiguous elements */
import java.util.*;
class Main
{
// This function prints all distinct elements
static int findLength(int arr[])
{
int n = arr.length;
int max_len = 1; // Initialize result
// One by one fix the starting points
for (int i=0; i<n-1; i++)
{
// Create an empty hash set and add i'th element
// to it.
HashSet<Integer> set = new HashSet<>();
set.add(arr[i]);
// Initialize max and min in current subarray
int mn = arr[i], mx = arr[i];
// One by one fix ending points
for (int j=i+1; j<n; j++)
{
// If current element is already in hash set, then
// this subarray cannot contain contiguous elements
if (set.contains(arr[j]))
break;
// Else add current element to hash set and update
// min, max if required.
set.add(arr[j]);
mn
= Math.
min(mn, arr
[j
]); mx
= Math.
max(mx, arr
[j
]);
// We have already checked for duplicates, now check
// for other property and update max_len if needed
if (mx-mn == j-i)
max_len
= Math.
max(max_len, mx
-mn
+1); }
}
return max_len; // Return result
}
// Driver method to test above method
public static void main
(String[] args
) {
int arr[] = {2,4,1,6,3,7,8,7};
System.
out.
println("Length of the longest contiguous subarray is " + findLength(arr));
}
}
LyogSmF2YSBwcm9ncmFtIHRvIGZpbmQgbGVuZ3RoIG9mIHRoZSBsYXJnZXN0IHN1YmFycmF5IHdoaWNoIGhhcwphbGwgY29udGlndW91cyBlbGVtZW50cyAqLwppbXBvcnQgamF2YS51dGlsLio7CgpjbGFzcyBNYWluCnsKCS8vIFRoaXMgZnVuY3Rpb24gcHJpbnRzIGFsbCBkaXN0aW5jdCBlbGVtZW50cwoJc3RhdGljIGludCBmaW5kTGVuZ3RoKGludCBhcnJbXSkKCXsKCQlpbnQgbiA9IGFyci5sZW5ndGg7CgkJaW50IG1heF9sZW4gPSAxOyAvLyBJbml0aWFsaXplIHJlc3VsdAoKCQkvLyBPbmUgYnkgb25lIGZpeCB0aGUgc3RhcnRpbmcgcG9pbnRzCgkJZm9yIChpbnQgaT0wOyBpPG4tMTsgaSsrKQoJCXsKCQkJLy8gQ3JlYXRlIGFuIGVtcHR5IGhhc2ggc2V0IGFuZCBhZGQgaSd0aCBlbGVtZW50CgkJCS8vIHRvIGl0LgoJCQlIYXNoU2V0PEludGVnZXI+IHNldCA9IG5ldyBIYXNoU2V0PD4oKTsKCQkJc2V0LmFkZChhcnJbaV0pOwoKCQkJLy8gSW5pdGlhbGl6ZSBtYXggYW5kIG1pbiBpbiBjdXJyZW50IHN1YmFycmF5CgkJCWludCBtbiA9IGFycltpXSwgbXggPSBhcnJbaV07CgoJCQkvLyBPbmUgYnkgb25lIGZpeCBlbmRpbmcgcG9pbnRzCgkJCWZvciAoaW50IGo9aSsxOyBqPG47IGorKykKCQkJewoJCQkJLy8gSWYgY3VycmVudCBlbGVtZW50IGlzIGFscmVhZHkgaW4gaGFzaCBzZXQsIHRoZW4KCQkJCS8vIHRoaXMgc3ViYXJyYXkgY2Fubm90IGNvbnRhaW4gY29udGlndW91cyBlbGVtZW50cwoJCQkJaWYgKHNldC5jb250YWlucyhhcnJbal0pKQoJCQkJCWJyZWFrOwoKCQkJCS8vIEVsc2UgYWRkIGN1cnJlbnQgZWxlbWVudCB0byBoYXNoIHNldCBhbmQgdXBkYXRlCgkJCQkvLyBtaW4sIG1heCBpZiByZXF1aXJlZC4KCQkJCXNldC5hZGQoYXJyW2pdKTsKCQkJCW1uID0gTWF0aC5taW4obW4sIGFycltqXSk7CgkJCQlteCA9IE1hdGgubWF4KG14LCBhcnJbal0pOwoKCQkJCS8vIFdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIGZvciBkdXBsaWNhdGVzLCBub3cgY2hlY2sKCQkJCS8vIGZvciBvdGhlciBwcm9wZXJ0eSBhbmQgdXBkYXRlIG1heF9sZW4gaWYgbmVlZGVkCgkJCQlpZiAobXgtbW4gPT0gai1pKQoJCQkJCW1heF9sZW4gPSBNYXRoLm1heChtYXhfbGVuLCBteC1tbisxKTsKCQkJfQoJCX0KCQlyZXR1cm4gbWF4X2xlbjsgLy8gUmV0dXJuIHJlc3VsdAoJfQoKCS8vIERyaXZlciBtZXRob2QgdG8gdGVzdCBhYm92ZSBtZXRob2QKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKQoJewoJaW50IGFycltdID0gezIsNCwxLDYsMyw3LDgsN307CglTeXN0ZW0ub3V0LnByaW50bG4oIkxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBjb250aWd1b3VzIHN1YmFycmF5IGlzICIgKwoJCQkJCQlmaW5kTGVuZ3RoKGFycikpOwoJfQp9Cg==