[Leetcode] 1590. Make Sum Divisible by P

RexiaN·2025년 11월 30일
function minSubarray(nums: number[], p: number): number {
    const totalSum = nums.reduce((acc, num) => acc + num, 0);
    const targetRemainder = totalSum % p;

    if (targetRemainder === 0) {
        return 0;
    }

    const remainderMap: Map<number, number> = new Map();
    remainderMap.set(0, -1);

    let currentMod = 0;
    let minLength = nums.length;

    for (let i = 0; i < nums.length; i++) {
        currentMod = (currentMod + nums[i]) % p;

        const requiredMod = (currentMod - targetRemainder + p) % p;

        if (remainderMap.has(requiredMod)) {
            const prevIndex = remainderMap.get(requiredMod)!;
            const currentLength = i - prevIndex;

            minLength = Math.min(minLength, currentLength);
        }

        remainderMap.set(currentMod, i);
    }

    if (minLength === nums.length) {
        return -1;
    }

    return minLength;
};

profile
Don't forget Rule No.1

0개의 댓글