顯示具有 LeetCode 標籤的文章。 顯示所有文章
顯示具有 LeetCode 標籤的文章。 顯示所有文章

2024/07/23

LeetCode 28. Find the Index of the First Occurrence in a String

/**
 * @param {string} haystack
 * @param {string} needle
 * @return {number}
 */
var strStr = function (haystack, needle) {
    return haystack.indexOf(needle)
};

2024/07/19

LeetCode 3131. Find the Integer Added to Array I

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var addedInteger = function (nums1, nums2) {
    if (nums1.length < 1 || nums2.length > 100 || nums1.length !== nums2.length) {
        return 0
    }

    const sum = (p, c) => p + c

    const sum1 = nums1.reduce(sum)
    const sum2 = nums2.reduce(sum)
    const total = sum2 > sum1 ? sum2 - sum1 : -(sum1 - sum2)

    return (total % nums1.length) === 0 ? total / nums1.length : 0
};

2024/07/18

LeetCode 1920. Build Array from Permutation

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var buildArray = function (nums) {
    if (nums.length < 1 || nums.length > 1000) {
        return []
    }
    const result = []
    nums.forEach((_, i) => result.push(nums[nums[i]]))

    return result
};

LeetCode 3110. Score of a String

/**
 * @param {string} s
 * @return {number}
 */
var scoreOfString = function (s) {
    if (s.length < 2 || s.length > 100) {
        return 0
    }

    let sum = 0
    let j = 1
    for (let i = 0; i < s.length - 1; i++) {
        sum += Math.abs(s[i].charCodeAt(0) - s[j++].charCodeAt(0))
    }

    return sum
};

LeetCode 2727. Is Object Empty

/**
 * @param {Object|Array} obj
 * @return {boolean}
 */
var isEmpty = function (obj) {
    if (obj instanceof Object)
        return !obj || Object.keys(obj).length === 0
    else if (obj instanceof Array)
        return !obj || obj.length === 0
};

LeetCode 2652. Sum Multiples

/**
 * @param {number} n
 * @return {number}
 */
var sumOfMultiples = function (n) {
    if (n < 1 || n > Math.pow(10, 3)) {
        return 0
    }

    let sum = 0
    const ary = Array.from({length: n}, (_, i) => i + 1)
    ary.forEach(i => {
        if (i % 3 === 0 || i % 5 === 0 || i % 7 === 0) {
            sum += i
        }
    })

    return sum
};

LeetCode 2000. Reverse Prefix of Word

/**
 * @param {string} word
 * @param {character} ch
 * @return {string}
 */
var reversePrefix = function (word, ch) {
    if (word.length < 1 || word.length > 250) {
        return ""
    }

    const index = word.indexOf(ch)

    if (index === -1) {
        return word
    } else {
        const revertStr = word.substring(0, index + 1)
        const lastStr = word.substring(index + 1)
        let newString = ""
        for (let i = revertStr.length - 1; i >= 0; i--) {
            newString += revertStr[i]
        }

        return `${newString}${lastStr}`
    }

};

LeetCode 2894. Divisible and Non-divisible Sums Difference

/**
 * @param {number} n
 * @param {number} m
 * @return {number}
 */
var differenceOfSums = function (n, m) {
    if (n < 1 || m > 1000) {
        return 0
    }

    const nums = Array.from({length: n}, (_, i) => i + 1)

    let num1 = 0
    let num2 = 0
    nums.forEach(n => {
        if (n % m !== 0) {
            num1 += n
        } else {
            num2 += n
        }
    })

    return num1 - num2
};

LeetCode 1108. Defanging an IP Address

/**
 * @param {string} address
 * @return {string}
 */
var defangIPaddr = function (address) {
    return address.replaceAll(".", "[.]")
};

LeetCode 2469. Convert the Temperature

/**
 * @param {number} celsius
 * @return {number[]}
 */
var convertTemperature = function (celsius) {
    return [
        celsius + 273.15,
        celsius * 1.80 + 32.00
    ]
};

LeetCode 1929. Concatenation of Array

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var getConcatenation = function (nums) {
    if (nums.length < 1 || nums.length > 1000) {
        return []
    }
    nums.push(...nums)
    return nums
};

LeetCode 2723. Add Two Promises

/**
 * 接收兩個Promise,當它們都解析完成後,將它們的結果相加並返回一個新的Promise。
 * 
 * @param {Promise} promise1 - 第一個Promise,應該解析為數值。
 * @param {Promise} promise2 - 第二個Promise,應該解析為數值。
 * @return {Promise} - 解析為兩個Promise結果相加的值。
 */
var addTwoPromises = async function(promise1, promise2) {
    // 等待第一個Promise解析,並將結果賦值給num1
    const num1 = await promise1;
    // 等待第二個Promise解析,並將結果賦值給num2
    const num2 = await promise2;
    // 返回一個新的Promise,解析為num1和num2的和
    return num1 + num2;
};

LeetCode 194. Transpose File


awk '
{
    for (i=1; i<=NF; i++) {
        a[i] = a[i] ? a[i] " " $i : $i
    }
}
END {
    for (i=1; i<=length(a); i++) {
        print a[i]
    }
}
' file.txt

LeetCode 193. Valid Phone Numbers

grep -E "^[0-9]{3}-[0-9]{3}-[0-9]{4}$|^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$" file.txt

LeetCode 192. Word Frequency

tr -s '[:space:]' '\n' < words.txt | sort | uniq -c | sort -nr | awk '{print $2, $1}'

2620. Counter

/**
 * @param {number} n
 * @return {Function} counter
 */
var createCounter = function (n) {

    return function () {
        return n++
    };
};

LeetCode 2621. Sleep

/**
 * 暫停指定的毫秒數後返回一個 Promise
 * @param {number} millis - 要暫停的毫秒數
 * @return {Promise} - 一個 Promise,在指定毫秒數後 resolve,並返回經過的時間
 */
async function sleep(millis) {
    // 獲取當前時間戳
    const t = Date.now();
    
    // 返回一個 Promise,該 Promise 在 setTimeout 完成後 resolve
    return new Promise(resolve =>
        // 設置定時器,暫停指定毫秒數後執行回調函數
        setTimeout(() => 
            // 在回調函數中,resolve Promise,並傳入經過的時間
            resolve(Date.now() - t), 
            millis
        )
    );
}

LeetCode 258. Add Digits

/**
 * 將數字各位數字相加,直到結果為一個個位數
 * @param {number} num - 輸入的整數
 * @return {number} - 相加結果的個位數
 */
var addDigits = function (num) {
    // 檢查輸入數字是否在有效範圍內
    if (num < 0 || num > Math.pow(2, 31) - 1) {
        return 0;
    }

    // 重複相加數字的每一位,直到結果為個位數
    while (num >= 10) {
        // 將數字轉換為字符串
        const str = num.toString();
        // 將字符串分割為字符數組
        const array = str.split('');
        // 初始化相加結果
        let result = 0;
        // 遍歷字符數組,將每個字符轉換為數字並相加
        array.forEach(i => result += parseInt(i));
        // 更新 num 為相加結果
        num = result;
    }

    // 返回最終結果,即個位數
    return num;
};

LeetCode 195. Tenth Line

sed -n '10p' file.txt

LeetCode 169. Majority Element

/**
 * 找到數組中的多數元素(即出現次數超過 n/2 的元素)
 * @param {number[]} nums - 整數數組
 * @return {number} - 多數元素
 */
var majorityElement = function(nums) {
    // 檢查數組長度是否在有效範圍內
    if (nums.length < 1 || nums.length > Math.pow(10, 4) * 5) {
        return 0;
    }

    // 將數組按升序排序
    nums = nums.sort((a, b) => a - b);

    // 返回數組中間的元素,因為排序後中間的元素必定是多數元素
    return nums[Math.floor(nums.length / 2)];
};