Skip to content

Leetcode Tasks

1.

/**
 * @param {number} num
 * @return {boolean}
 */
const checkPerfectNumber = (num) => {
    const divisors = []
    for (let i = num - 1; i > 0; i--) {
        const isDivisor = num % i === 0
        if (isDivisor) divisors.push(i)
    }
    const devisiorsSum = divisors.reduce((a, b) => a + b, 0)
    return devisiorsSum === num
};

2.

/**
 * @param {string[]} word1
 * @param {string[]} word2
 * @return {boolean}
 */
const arrayStringsAreEqual = (word1, word2) => {
    const str1 = word1.join("")
    const str2 = word2.join("")
    return str1 === str2
};

3.

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
const largestSumAfterKNegations = (nums, k) => {
    for (let i = 0; i < k; i++) {
        smallest = Math.min(...nums)
        smallest_index = nums.findIndex(num => num === smallest)
        nums[smallest_index] *= -1
    }
    return nums.reduce((a, b) => a + b, 0);
};

4.

/**
 * @param {number[]} nums
 * @return {number[]}
 */
const frequencySort = (nums) => {
    nums_grouped = []

    nums.forEach(target => {
        if (!nums_grouped.flat(1).includes(target)) {
            targetCount = nums.reduce((a, v) => (v === target ? a + 1 : a), 0)
            nums_grouped.push(Array(targetCount).fill(target))

        }
    })

    nums_grouped.sort((a, b) => a.length - b.length || b[0] - a[0])
    return nums_grouped.flat(1)
};

5.

/**
 * @param {number[]} nums
 * @return {number}
 */
const minimumOperations = (nums) => {
    let operations = 0
    while (nums.reduce((a, b) => a + b, 0) !== 0) {
        smallest = Math.min(...nums.filter(num => num > 0))
        nums = nums.map(num => num > 0 ? num - smallest : num)
        operations++
    }
    return operations
};

6.

/**
 * @param {string} sequence
 * @param {string} word
 * @return {number}
 */
const maxRepeating = (sequence, word) => {
    return sequence.split(word).length - 1
};

7.

/**
 * @param {number[]} timeSeries
 * @param {number} duration
 * @return {number}
 */
const findPoisonedDuration = (timeSeries, duration) => {
    totalDurationSet = new Set()
    timeSeries.forEach(time => {
        for (let i = 0; i < duration; i++) {
            totalDurationSet.add(time + i)
        }
    })
    return totalDurationSet.size
};

8.

/**
 * @param {number} n
 * @return {number}
 */
alternateDigitSum = (n) => {
    let isPositive = false
    digits = [...n.toString()].map(letter => {
        isPositive = !isPositive
        if (isPositive) {
            return Number("+" + letter)
        } else {
            return Number("-" + letter)
        }
    })
    return digits.reduce((a, b) => a + b, 0);
};