티스토리 뷰

문제 링크 : https://leetcode.com/problems/maximum-sum-of-distinct-subarrays-with-length-k/description/

🍊해결방법

  • 연속된 k개의 부분수열의 합 중 최대값
  • 부분수열에서 중복된 숫자는 없어야 한다
  • set을 활용해서 중복검사
  • 슬라이딩윈도우를 활용하여 최대값 구하자

😀풀이

import java.util.*;

class Solution {
    public long maximumSubarraySum(int[] nums, int k) {

        // 연속된 부분배열의 길이는 k만큼
        // 중복되는 수가 있으면 안됨
        // 최댓값 출력

        int N = nums.length;

        // 중복된 숫자가 어디에 위치 있는지 확인
        Set<Integer> set = new HashSet<>();
        

        long sum = 0;
        int start = 0;
        long max = 0;

        for(int i=0; i<N; i++){

            int num = nums[i];

            // 중복
            if(set.contains(num)){
                
                while(set.contains(num)){

                    set.remove(nums[start]);
                    sum -= nums[start];
                    start++;
                }

                set.add(num);
                sum += num;


            }
            else{
                set.add(num);
                sum += num;

                if(set.size() == k){
                    max = Math.max(max, sum);

                    set.remove(nums[start]);
                    sum -= nums[start];
                    start++;
                }

            }


        
        }


        


        return max;
    }
}