LeetCode第1695题 - 删除子数组的最大得分
题目
解答
class Solution {public int maximumUniqueSubarray(int[] nums) {int left = 0, right = 0;int result = Integer.MIN_VALUE;int sum = 0;Set<Integer> set = new HashSet<>();while (right < nums.length) {int v1 = nums[right];if (set.add(v1)) {++right;sum += v1;continue;}result = Math.max(result, sum);if (left < nums.length) {set.remove(nums[left]);sum -= nums[left];++left;}}result = Math.max(result, sum);return result;}
}
测试用例
@Testpublic void test001() {int result = s.maximumUniqueSubarray(new int[]{4, 2, 4, 5, 6});int expected = 17;Assert.assertTrue(String.valueOf(result), result == expected);}@Testpublic void test002() {int result = s.maximumUniqueSubarray(new int[]{5, 2, 1, 2, 5, 2, 1, 2, 5});int expected = 8;Assert.assertTrue(String.valueOf(result), result == expected);}@Testpublic void test003() {int result = s.maximumUniqueSubarray(new int[]{2, 4, 5, 6});int expected = 17;Assert.assertTrue(String.valueOf(result), result == expected);}@Testpublic void test004() {int result = s.maximumUniqueSubarray(new int[]{4, 2, 5, 6});int expected = 17;Assert.assertTrue(String.valueOf(result), result == expected);}@Testpublic void test005() {int result = s.maximumUniqueSubarray(new int[]{4});int expected = 4;Assert.assertTrue(String.valueOf(result), result == expected);}@Testpublic void test006() {int result = s.maximumUniqueSubarray(new int[]{4, 5});int expected = 9;Assert.assertTrue(String.valueOf(result), result == expected);}@Testpublic void test007() {int result = s.maximumUniqueSubarray(new int[]{4, 4});int expected = 4;Assert.assertTrue(String.valueOf(result), result == expected);}
总结
使用滑动窗口的套路来解题。