Contents
내가 작성한 코드

양의 정수 'nums' 배열이 주어지면 고유한 요소가 포함된 하위 배열을 지우려고 합니다.
하위 배열을 지우면 해당 요소의 합과 같습니다.
정확히 하나의 하위 배열을 지워서 얻을 수 있는 최대 점수를 반환하세요.
배열 'b'가 a의 연속적인 부분열을 형성하는 경우,
즉 어떤 '(l,r)'에 대해 'a[l], a[l+1], ..., a[r]'와 같다면 'a'의 부분열이라고 합니다.
제약 조건:
* 1 <= nums.length <= 105
* 1 <= nums [i] <= 104
내가 작성한 코드
import java.util.*;
class Solution {
public int maximumUniqueSubarray(int[] nums) {
Set<Integer> set = new HashSet<>(); // 현재 서브배열의 원소 집합
int left = 0; // 왼쪽 포인터
int right = 0; // 오른쪽 포인터
int sum = 0; // 포인터 내부 합
int maxSum = 0; // 최대 값
while (right < nums.length) {
// 중복이 아니면
// 포인터를 오른쪽을 이동시키며 값들 증가
if (!set.contains(nums[right])) {
set.add(nums[right]);
sum += nums[right];
maxSum = Math.max(maxSum, sum);
right++;
} else {
// 중복이 생기면 왼쪽 포인터를 이동시키며 값들 감소
set.remove(nums[left]);
sum -= nums[left];
left++;
}
}
return maxSum;
}
}
Share article