国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

● day5:哈希表理論基礎(chǔ) 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

這篇具有很好參考價(jià)值的文章主要介紹了● day5:哈希表理論基礎(chǔ) 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

今日任務(wù)

● 哈希表理論基礎(chǔ)

● 242.有效的字母異位詞

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

● 202. 快樂數(shù)

● 1. 兩數(shù)之和

詳細(xì)布置

哈希表理論基礎(chǔ)

建議:大家要了解哈希表的內(nèi)部實(shí)現(xiàn)原理,哈希函數(shù),哈希碰撞,以及常見哈希表的區(qū)別,數(shù)組,set 和map。

什么時(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

242.有效的字母異位詞

建議: 這道題目,大家可以感受到 數(shù)組 用來(lái)做哈希表 給我們帶來(lái)的遍歷之處。

題目鏈接/文章講解/視頻講解: 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

思路:數(shù)組其實(shí)就是一個(gè)簡(jiǎn)單哈希表,而且這道題目中字符串只有小寫字符,那么就可以定義一個(gè)數(shù)組,來(lái)記錄字符串s里字符出現(xiàn)的次數(shù),需要定義一個(gè)多大的數(shù)組呢,定一個(gè)數(shù)組叫做record,大小為26 就可以了,初始化為0,因?yàn)樽址鸻到字符z的ASCII也是26個(gè)連續(xù)的數(shù)值。

class Solution {
public:
    bool isAnagram(string s, string t) {
        int hash[26] = {0};//定義一個(gè)哈希表來(lái)存儲(chǔ)兩個(gè)字符串中的字母
        for(int i = 0; i < s.size(); i++){
           hash[s[i] - 'a'] ++;//用0-25來(lái)代替a-z這些字母,數(shù)組里的值對(duì)應(yīng)該字母出現(xiàn)的次數(shù)
        }
        for(int i = 0; i < t.size(); i++){
           hash[t[i] - 'a'] --;//用0-25來(lái)代替a-z這些字母,字母出現(xiàn)幾次就減去幾
        }
        for(int i = 0; i < 26; i++){
 // record數(shù)組如果有的元素不為零0,說(shuō)明字符串s和t 一定是誰(shuí)多了字符或者誰(shuí)少了字符。
            if(hash[i] != 0){
                return false;
            }
        }
// record數(shù)組所有元素都為零0,說(shuō)明字符串s和t是字母異位詞
        return true;
    }    
};

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

建議:本題就開始考慮 什么時(shí)候用set 什么時(shí)候用數(shù)組,本題其實(shí)是使用set的好題,但是后來(lái)力扣改了題目描述和 測(cè)試用例,添加了 0 <= nums1[i], nums2[i] <= 1000 條件,所以使用數(shù)組也可以了,不過(guò)建議大家忽略這個(gè)條件。 嘗試去使用set。

題目鏈接/文章講解/視頻講解: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ù)據(jù)結(jié)構(gòu):unordered_set

條件:輸出結(jié)果中的每個(gè)元素一定是唯一的,也就是說(shuō)輸出的結(jié)果的去重的, 同時(shí)可以不考慮輸出結(jié)果的順序

● day5:哈希表理論基礎(chǔ) 242.有效的字母異位詞   349. 兩個(gè)數(shù)組的交集   202. 快樂數(shù) 1. 兩數(shù)之和

總結(jié):創(chuàng)建哈希表,將nums1中出現(xiàn)的字母在哈希數(shù)組中做記錄;之后比較nums2中字母是否在表中出現(xiàn)

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set; 存放結(jié)果,之所以用set是為了給結(jié)果集去重
        unordered_set<int> nums1_set(nums1.begin(), nums1.end());
        for(int num : nums2){
? ? // 發(fā)現(xiàn)nums2的元素 在nums_set里又出現(xiàn)過(guò)
            if(nums1_set.find(num) != nums1_set.end()){
                result_set.insert(num);
            }
        }
        return vector<int>(result_set.begin() , result_set.end());
    }
};

202. 快樂數(shù)

建議:這道題目也是set的應(yīng)用,其實(shí)和上一題差不多,就是 套在快樂數(shù)一個(gè)殼子

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

這道題目使用哈希法,來(lái)判斷這個(gè)sum是否重復(fù)出現(xiàn),如果重復(fù)了就是return false, 否則一直找到sum為1為止

class Solution {
public:
    unordered_set<int>result;
    int getSum(int n){
        int sum = 0;
        while(n){
            sum += (n % 10) * (n % 10);
            n = n /10; 
        }
        return sum;
    }
    bool isHappy(int n){
       
        while(1){ 
            int sum = getSum(n);
            if(sum == 1){
                 return true;
            }
// 如果這個(gè)sum曾經(jīng)出現(xiàn)過(guò),說(shuō)明已經(jīng)陷入了無(wú)限循環(huán)了,立刻return false
            if(result.find(sum) != result.end()){
                return false;
            }else{
                result.insert(sum);
            }
            n = sum;
        }
        
    }
     
};

1. 兩數(shù)之和

建議:本題雖然是 力扣第一題,但是還是挺難的,也是 代碼隨想錄中 數(shù)組,set之后,使用map解決哈希問(wèn)題的第一題。

建議大家先看視頻講解,然后嘗試自己寫代碼,在看文章講解,加深印象。

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

暴力法:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j =i + 1; j < nums.size(); j++){
                if(nums[i]+nums[j] == target){
                    return{i, j};
                }
            }
        } 
        return {};
    }
};

本題需要一個(gè)集合來(lái)存放我們遍歷過(guò)的元素,然后在遍歷數(shù)組的時(shí)候去詢問(wèn)這個(gè)集合,某元素是否遍歷過(guò),也就是 是否出現(xiàn)在這個(gè)集合。

那么我們就應(yīng)該想到使用哈希法了。

因?yàn)楸镜?,我們不僅要知道元素有沒有遍歷過(guò),還有知道這個(gè)元素對(duì)應(yīng)的下標(biāo),需要使用 key value結(jié)構(gòu)來(lái)存放,key來(lái)存元素,value來(lái)存下標(biāo),那么使用map正合適。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-446625.html

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int>map;
        for(int i = 0; i < nums.size(); i++){
   // 遍歷當(dāng)前元素,并在map中尋找是否有匹配的key
            auto temp = map.find(target - nums[i]);
            if(temp != map.end()){
                return{temp -> second, i};
            }else{
  // 如果沒找到匹配對(duì),就把訪問(wèn)過(guò)的元素和下標(biāo)加入到map中
                map.insert(pair<int,int>(nums[i], i));
            }
        } 
        return {};
    }
};

到了這里,關(guān)于● day5:哈希表理論基礎(chǔ) 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包