代碼隨想錄算法訓(xùn)練營(yíng)第六天| 哈希表理論基礎(chǔ)、242.有效的字母異位詞、349. 兩個(gè)數(shù)組的交集、202. 快樂數(shù)、1. 兩數(shù)之和

哈希表理論基礎(chǔ)

什么時(shí)候想到用哈希法,當(dāng)我們遇到了要快速判斷一個(gè)元素是否出現(xiàn)集合里的時(shí)候,就要考慮哈希法。

文章講解:https://programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

有效的字母異位詞

題目鏈接/文章講解/視頻講解: https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html

第一想法

運(yùn)用數(shù)組來做哈希表

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if (s.length !== t.length) return false
    let res = new Array(26).fill(0)
    for(let i of s) {
        res[i.charCodeAt() - "a".charCodeAt()]++
    }
    for(let j of t) {
        res[j.charCodeAt() - "a".charCodeAt()]--
    }
    for(let q = 0 ; q < 26 ; q++){
        if(res[q] !== 0) return false
    }
    return true
};

兩個(gè)數(shù)組的交集

題目鏈接/文章講解/視頻講解:https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html

第一想法

數(shù)字小的時(shí)候用數(shù)組,數(shù)字大的時(shí)候用set,需要用到坐標(biāo)就用map

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function(nums1, nums2) {
    if(nums1.length<nums2.length){
        const temp = nums1;
        nums1 = nums2;
        nums2 = temp;
    }

    const nums1Set = new Set(nums1);
    const resSet = new Set();

    for(let i = 0;i<nums2.length;i++){
        if(nums1Set.has(nums2[i])){
            resSet.add(nums2[i])
        }
    }

    return Array.from(resSet)
};

快樂數(shù)

題目鏈接/文章講解:https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html

第一想法

迭代n,運(yùn)用函數(shù)getSum

/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function (n) {
    var sumSet = new Set()
    var getSum = function (n) {
        let sum = 0
        while (n > 0) {
            sum += (n % 10) * (n % 10)
            n = Math.floor(n / 10)
        }
        return sum
    }
    n = getSum(n)
    while(true){
        if(n == 1) return true
        if(sumSet.has(n)) return false
        sumSet.add(n)
        n = getSum(n)
    }

};

兩數(shù)之和

題目鏈接/文章講解/視頻講解:https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html

第一想法

第一題,之前做的時(shí)候沒學(xué)過哈希表,現(xiàn)在懂了

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (nums, target) {
    var hash = new Map()
    for (let i = 0; i < nums.length; i++) {
        hash.set(nums[i], i)
    }
    for (let i = 0; i < nums.length; i++) {
        if (hash.has(target - nums[i]) && i !== hash.get(target - nums[i])) return [i, hash.get(target - nums[i])]
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容