Skip to content

Commit 2d1ef54

Browse files
committed
Solution to "Longest Balanced Subarray I" problem
1 parent 1c6bb81 commit 2d1ef54

2 files changed

Lines changed: 102 additions & 0 deletions

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.github.dkoval.leetcode.challenge;
2+
3+
import java.util.HashSet;
4+
5+
/**
6+
* <a href="https://leetcode.com/problems/longest-balanced-subarray-i/">Longest Balanced Subarray I</a>
7+
* <p>
8+
* You are given an integer array nums.
9+
* <p>
10+
* A subarray is called balanced if the number of distinct even numbers in the subarray is equal to the number of distinct odd numbers.
11+
* <p>
12+
* Return the length of the longest balanced subarray.
13+
* <p>
14+
* Constraints:
15+
* <ul>
16+
* <li>1 <= nums.length <= 1500</li>
17+
* <li>1 <= nums[i] <= 10^5</li>
18+
* </ul>
19+
*/
20+
public interface LongestBalancedSubarray1 {
21+
22+
int longestBalanced(int[] nums);
23+
24+
class LongestBalancedSubarray1Rev1 implements LongestBalancedSubarray1 {
25+
26+
@Override
27+
public int longestBalanced(int[] nums) {
28+
final var n = nums.length;
29+
30+
// brute force: try every subarray
31+
var best = 0;
32+
for (var left = 0; left < n; left++) {
33+
final var even = new HashSet<Integer>();
34+
final var odds = new HashSet<Integer>();
35+
for (var right = left; right < n; right++) {
36+
final var xs = (nums[right] % 2 == 0) ? even : odds;
37+
xs.add(nums[right]);
38+
39+
if (even.size() == odds.size()) {
40+
best = Math.max(best, right - left + 1);
41+
}
42+
}
43+
}
44+
return best;
45+
}
46+
}
47+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.github.dkoval.leetcode.challenge
2+
3+
import com.github.dkoval.leetcode.challenge.LongestBalancedSubarray1.LongestBalancedSubarray1Rev1
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Nested
6+
import org.junit.jupiter.api.extension.ExtensionContext
7+
import org.junit.jupiter.params.ParameterizedTest
8+
import org.junit.jupiter.params.provider.Arguments
9+
import org.junit.jupiter.params.provider.Arguments.arguments
10+
import org.junit.jupiter.params.provider.ArgumentsProvider
11+
import org.junit.jupiter.params.provider.ArgumentsSource
12+
import org.junit.jupiter.params.support.ParameterDeclarations
13+
import java.util.stream.Stream
14+
15+
internal class LongestBalancedSubarray1Test {
16+
17+
class InputArgumentsProvider : ArgumentsProvider {
18+
19+
override fun provideArguments(
20+
parameters: ParameterDeclarations,
21+
context: ExtensionContext
22+
): Stream<out Arguments> = Stream.of(
23+
arguments(
24+
intArrayOf(2, 5, 4, 3),
25+
4
26+
),
27+
arguments(
28+
intArrayOf(3, 2, 2, 5, 4),
29+
5
30+
),
31+
arguments(
32+
intArrayOf(1, 2, 3, 2),
33+
3
34+
)
35+
)
36+
}
37+
38+
@Nested
39+
inner class LongestBalancedSubarray1Rev1Test {
40+
41+
@ParameterizedTest
42+
@ArgumentsSource(InputArgumentsProvider::class)
43+
fun `should return the length of the longest balanced subarray`(
44+
nums: IntArray,
45+
expected: Int
46+
) {
47+
LongestBalancedSubarray1Rev1().test(nums, expected)
48+
}
49+
}
50+
}
51+
52+
private fun LongestBalancedSubarray1.test(nums: IntArray, expected: Int) {
53+
val actual = longestBalanced(nums)
54+
assertEquals(expected, actual)
55+
}

0 commit comments

Comments
 (0)