Untitled

 avatar
unknown
plain_text
a month ago
893 B
1
Indexable
public int minSubarray(int[] nums, int p) {
        long totalSum = 0;
        for (int num : nums) {
            totalSum += num;
        }
        
        int remainder = (int) (totalSum % p);
        if (remainder == 0) return 0; // No need to remove any subarray
        
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0, 0); // Base case for prefix sum
        int prefixSum = 0;
        int minLength = nums.length;
        
        for (int i = 0; i < nums.length; i++) {
            prefixSum = (prefixSum + nums[i]) % p;
            
            int target = (prefixSum - remainder + p) % p;
            if (map.containsKey(target)) {
                minLength = Math.min(minLength, i + 1 - map.get(target));
            }
            
            map.put(prefixSum, i + 1);
        }
        
        return minLength == nums.length ? -1 : minLength;
    }
Editor is loading...
Leave a Comment