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

力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼

這篇具有很好參考價(jià)值的文章主要介紹了力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼,每題做詳細(xì)思路梳理,配套Python&Java雙語(yǔ)代碼, 2024.04.02?可通過(guò)leetcode所有測(cè)試用例。

目錄

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

解題思路

完整代碼

Python

Java

387. 字符串中的第一個(gè)唯一字符

解題思路

完整代碼

Python

Java

394. 字符串解碼

解題思路

完整代碼

Python

Java


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

給定兩個(gè)數(shù)組?nums1?和?nums2?,返回?它們的?

交集

?。輸出結(jié)果中的每個(gè)元素一定是? 唯一?的。我們可以? 不考慮輸出結(jié)果的順序?。

示例 1:

輸入:nums1 = [1,2,2,1], nums2 = [2,2]
輸出:[2]

示例 2:

輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出:[9,4]
解釋:[4,9] 也是可通過(guò)的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

解題思路

  1. 使用兩個(gè)哈希集合:一個(gè)集合 set1 存儲(chǔ) nums1 中的元素,另一個(gè)集合 set2 用來(lái)存儲(chǔ) nums2 中的元素。

  2. 填充第一個(gè)集合:遍歷數(shù)組 nums1,將其中的元素加入 set1。哈希集合會(huì)自動(dòng)處理重復(fù)元素,確保 set1 中的元素唯一。

  3. 查找交集:遍歷數(shù)組 nums2,檢查每個(gè)元素是否已存在于 set1 中。如果存在,說(shuō)明該元素是兩個(gè)數(shù)組的交集的一部分,將其加入 set2。這樣做的原因是 set2 此時(shí)用于存儲(chǔ)交集結(jié)果,也能自動(dòng)去重。

  4. 轉(zhuǎn)換結(jié)果:最后,將 set2 中的元素轉(zhuǎn)換成數(shù)組形式返回,這些元素就是兩個(gè)數(shù)組的交集。

完整代碼

Python
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1)
        set2 = set()
        
        for num in nums2:
            if num in set1:
                set2.add(num)
        
        return list(set2)
Java
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> resultSet = new HashSet<>();
        
        // 填充第一個(gè)集合
        for (int num : nums1) {
            set1.add(num);
        }
        
        // 查找交集
        for (int num : nums2) {
            if (set1.contains(num)) {
                resultSet.add(num);
            }
        }
        
        // 轉(zhuǎn)換結(jié)果
        int[] result = new int[resultSet.size()];
        int i = 0;
        for (int num : resultSet) {
            result[i++] = num;
        }
        
        return result;
    }
}

力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼,python,算法,leetcode,leetcode,算法,職場(chǎng)和發(fā)展

387. 字符串中的第一個(gè)唯一字符

給定一個(gè)字符串?s?,找到?它的第一個(gè)不重復(fù)的字符,并返回它的索引?。如果不存在,則返回?-1?。

示例 1:

輸入: s = "leetcode"
輸出: 0

示例 2:

輸入: s = "loveleetcode"
輸出: 2

示例 3:

輸入: s = "aabb"
輸出: -1

解題思路

  1. 統(tǒng)計(jì)字符頻率:遍歷字符串 s 一次,使用哈希表(如 Python 中的字典或 Java 中的 HashMap)來(lái)統(tǒng)計(jì)每個(gè)字符出現(xiàn)的次數(shù)。

  2. 找到第一個(gè)不重復(fù)字符:再次遍歷字符串 s,使用之前構(gòu)建的哈希表來(lái)檢查每個(gè)字符的頻率。第一個(gè)頻率為 1 的字符就是我們要找的第一個(gè)不重復(fù)字符,此時(shí)返回它的索引。

  3. 處理未找到的情況:如果遍歷結(jié)束仍未找到頻率為 1 的字符,則說(shuō)明沒有不重復(fù)的字符,返回 -1。

完整代碼

Python
class Solution:
    def firstUniqChar(self, s: str) -> int:
        # 使用哈希表統(tǒng)計(jì)每個(gè)字符的頻率
        charCount = {}
        for char in s:
            charCount[char] = charCount.get(char, 0) + 1
        
        # 查找第一個(gè)不重復(fù)的字符
        for i, char in enumerate(s):
            if charCount[char] == 1:
                return i
        
        # 如果沒有不重復(fù)的字符,返回-1
        return -1
Java
class Solution {
    public int firstUniqChar(String s) {
        // 使用哈希表統(tǒng)計(jì)每個(gè)字符的頻率
        HashMap<Character, Integer> charCount = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            charCount.put(c, charCount.getOrDefault(c, 0) + 1);
        }
        
        // 查找第一個(gè)不重復(fù)的字符
        for (int i = 0; i < s.length(); i++) {
            if (charCount.get(s.charAt(i)) == 1) {
                return i;
            }
        }
        
        // 如果沒有不重復(fù)的字符,返回-1
        return -1;
    }
}

394. 字符串解碼

給定一個(gè)經(jīng)過(guò)編碼的字符串,返回它解碼后的字符串。

編碼規(guī)則為:?k[encoded_string],表示其中方括號(hào)內(nèi)部的?encoded_string?正好重復(fù)?k?次。注意?k?保證為正整數(shù)。

你可以認(rèn)為輸入字符串總是有效的;輸入字符串中沒有額外的空格,且輸入的方括號(hào)總是符合格式要求的。

此外,你可以認(rèn)為原始數(shù)據(jù)不包含數(shù)字,所有的數(shù)字只表示重復(fù)的次數(shù)?k?,例如不會(huì)出現(xiàn)像?3a?或?2[4]?的輸入。

示例 1:

輸入:s = "3[a]2[bc]"
輸出:"aaabcbc"

示例 2:

輸入:s = "3[a2[c]]"
輸出:"accaccacc"

示例 3:

輸入:s = "2[abc]3[cd]ef"
輸出:"abcabccdcdcdef"

示例 4:

輸入:s = "abc3[cd]xyz"
輸出:"abccdcdcdxyz"

解題思路

  1. 創(chuàng)建兩個(gè)棧:一個(gè)用于保存數(shù)字(即重復(fù)次數(shù)),另一個(gè)用于保存字符串。

  2. 遍歷輸入字符串:對(duì)每個(gè)字符進(jìn)行處理:

    • 如果遇到數(shù)字,解析整個(gè)數(shù)字(因?yàn)閿?shù)字可能超過(guò)一位),并將其壓入數(shù)字棧。
    • 如果遇到字母,將其添加到當(dāng)前字符串中。
    • 如果遇到'[',表示一個(gè)新的編碼字符串的開始,因此需要將當(dāng)前字符串壓入字符串棧,然后重置當(dāng)前字符串。
    • 如果遇到']',表示一個(gè)編碼字符串的結(jié)束,此時(shí)應(yīng)從數(shù)字棧中彈出一個(gè)數(shù)字,表示重復(fù)次數(shù),并從字符串棧中彈出字符串(如果有的話),將當(dāng)前字符串重復(fù)指定次數(shù)后,與彈出的字符串連接起來(lái),更新當(dāng)前字符串。
  3. 返回解碼后的字符串:遍歷完成后,當(dāng)前字符串即為解碼后的字符串。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-844682.html

完整代碼

Python
class Solution:
    def decodeString(self, s: str) -> str:
        numStack = []  # 存儲(chǔ)重復(fù)次數(shù)
        strStack = []  # 存儲(chǔ)字符串
        currentNum = 0
        currentStr = ''
        
        for char in s:
            if char.isdigit():
                currentNum = currentNum * 10 + int(char)  # 構(gòu)建多位數(shù)
            elif char == '[':
                # 遇到 '[',將當(dāng)前數(shù)字和字符串分別壓棧,然后重置
                numStack.append(currentNum)
                strStack.append(currentStr)
                currentNum, currentStr = 0, ''
            elif char == ']':
                # 遇到 ']',彈出棧頂數(shù)字,重復(fù)當(dāng)前字符串,并與棧頂字符串連接
                num = numStack.pop()
                prevStr = strStack.pop()
                currentStr = prevStr + num * currentStr
            else:
                currentStr += char  # 構(gòu)建字符串
        
        return currentStr
Java
class Solution {
    public String decodeString(String s) {
        Stack<Integer> numStack = new Stack<>();
        Stack<String> strStack = new Stack<>();
        String currentStr = "";
        int currentNum = 0;
        
        for (char ch : s.toCharArray()) {
            if (Character.isDigit(ch)) {
                currentNum = currentNum * 10 + (ch - '0');
            } else if (ch == '[') {
                // 遇到 '[',將當(dāng)前數(shù)字和字符串分別壓棧,然后重置
                numStack.push(currentNum);
                strStack.push(currentStr);
                currentNum = 0;
                currentStr = "";
            } else if (ch == ']') {
                // 遇到 ']',彈出棧頂數(shù)字,重復(fù)當(dāng)前字符串,并與棧頂字符串連接
                StringBuilder tempStr = new StringBuilder(strStack.pop());
                int repeatTimes = numStack.pop();
                for (int i = 0; i < repeatTimes; i++) {
                    tempStr.append(currentStr);
                }
                currentStr = tempStr.toString();
            } else {
                currentStr += ch;
            }
        }
        
        return currentStr;
    }
}

到了這里,關(guān)于力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼的文章就介紹完了。如果您還想了解更多內(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)文章

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

    數(shù)組哈希.無(wú)序set都可以 給定兩個(gè)數(shù)組 nums1 和 nums2 ,返回 它們的交集 。輸出結(jié)果中的每個(gè)元素一定是 唯一 的。我們可以 不考慮輸出結(jié)果的順序 。 示例 1: 輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2] 示例 2: 輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出:[9,4] 解釋:[4,9] 也是可通

    2024年01月23日
    瀏覽(22)
  • 算法訓(xùn)練第5天|哈希表理論基礎(chǔ) 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

    算法訓(xùn)練第5天|哈希表理論基礎(chǔ) 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

    哈希表是根據(jù) 關(guān)鍵碼 的值而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。 一般哈希表都是用來(lái)快速判斷一個(gè)元素是否出現(xiàn)集合里。 數(shù)組、集合set、映射map 力扣鏈接 題目描述: 給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來(lái)判斷 t 是否是 s 的字母異位詞。 注意: 若? s ?和? t ? 中每個(gè)字符出現(xiàn)的

    2024年02月19日
    瀏覽(23)
  • Leetcode:349. 兩個(gè)數(shù)組的交集【題解超詳細(xì)】

    Leetcode:349. 兩個(gè)數(shù)組的交集【題解超詳細(xì)】

    題目 給定兩個(gè)數(shù)組? nums1 ?和? nums2 ?,返回? 它們的交集 ?。輸出結(jié)果中的每個(gè)元素一定是? 唯一 ?的。我們可以? 不考慮輸出結(jié)果的順序 ?。 難度: 簡(jiǎn)單 題目鏈接:349.兩個(gè)數(shù)組的交集 示例 1: 示例 2: 提示: 1 = nums1.length, nums2.length = 1000 0 = nums1[i], nums2[i] = 1000 思路解析

    2024年02月09日
    瀏覽(22)
  • 力扣(LeetCode)算法_C++—— 兩個(gè)數(shù)組的交集

    給定兩個(gè)數(shù)組 nums1 和 nums2 ,返回 它們的交集 。輸出結(jié)果中的每個(gè)元素一定是 唯一 的。我們可以 不考慮輸出結(jié)果的順序 。 示例 1: 輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2] 示例 2: 輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出:[9,4] 解釋:[4,9] 也是可通過(guò)的

    2024年02月09日
    瀏覽(23)
  • Day 6 哈希表part01:242.有效的字母異位詞 , 349. 兩個(gè)數(shù)組的交集 , 202. 快樂數(shù), 1. 兩數(shù)之和

    Day 6 哈希表part01:242.有效的字母異位詞 , 349. 兩個(gè)數(shù)組的交集 , 202. 快樂數(shù), 1. 兩數(shù)之和

    哈希表理論基礎(chǔ)? 要了解哈希表的內(nèi)部實(shí)現(xiàn)原理,哈希函數(shù),哈希碰撞,以及常見哈希表的區(qū)別,數(shù)組,set?和map。?? 什么時(shí)候想到用哈希法,當(dāng)我們遇到了 要快速判斷一個(gè)元素是否出現(xiàn)集合里的時(shí)候 ,就要考慮 哈希法 。 ?這句話很重要,大家在做哈希表題目都要思考這

    2024年02月15日
    瀏覽(23)
  • 看完這篇文章你就徹底懂啦{保姆級(jí)講解}-----(LeetCode刷題349兩個(gè)數(shù)組的交集) 2023.5.9

    看完這篇文章你就徹底懂啦{保姆級(jí)講解}-----(LeetCode刷題349兩個(gè)數(shù)組的交集) 2023.5.9

    本文章一部分內(nèi)容參考于《代碼隨想錄》----如有侵權(quán)請(qǐng)聯(lián)系作者刪除即可,撰寫本文章主要目的在于記錄自己學(xué)習(xí)體會(huì)并分享給大家,全篇并不僅僅是復(fù)制粘貼,更多的是加入了自己的思考,希望讀完此篇文章能真正幫助到您!??! 力扣題目鏈接 分析題目: 什么是哈希表?

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

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

    ● 哈希表理論基礎(chǔ) ● 242.有效的字母異位詞 ● 349. 兩個(gè)數(shù)組的交集 ● 202. 快樂數(shù) ● 1. 兩數(shù)之和 哈希表理論基礎(chǔ) 建議:大家要了解哈希表的內(nèi)部實(shí)現(xiàn)原理,哈希函數(shù),哈希碰撞,以及常見哈希表的區(qū)別,數(shù)組,set 和map。 什么時(shí)候想到用哈希法, 當(dāng)我們遇到了要快速判斷一

    2024年02月05日
    瀏覽(22)
  • 兩個(gè)數(shù)組的交集(力扣刷題)

    兩個(gè)數(shù)組的交集(力扣刷題)

    ????????給定兩個(gè)數(shù)組? nums1 ?和? nums2 ?,返回? 它們的交集 ?。輸出結(jié)果中的每個(gè)元素一定是? 唯一 ?的。我們可以? 不考慮輸出結(jié)果的順序 ?。 來(lái)源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/intersection-of-two-arrays ? 說(shuō)明: ?輸出結(jié)果中的每個(gè)元素一定是唯一的。

    2023年04月09日
    瀏覽(24)
  • 【代碼隨想錄】Day6 哈希表理論基礎(chǔ) 242.有效的字母異位詞 ,349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

    【代碼隨想錄】Day6 哈希表理論基礎(chǔ) 242.有效的字母異位詞 ,349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和 新的一部分-哈希表,哈希表之前做題相對(duì)比較熟練希望能快速?gòu)?fù)習(xí) Source: 題目 Note:以前刷的時(shí)候使用python字典,這次換做C++ 注意數(shù)組就是簡(jiǎn)單的哈希表,但是數(shù)組的大小

    2024年02月20日
    瀏覽(25)
  • 代碼隨想錄二刷 day06 | 哈希表之 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

    代碼隨想錄二刷 day06 | 哈希表之 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

    哈希表能解決什么問題呢?一般哈希表都是用來(lái)快速判斷一個(gè)元素是否出現(xiàn)集合里。 242.有效的字母異位詞 題目鏈接 解題思路: 題目的意思就是 判斷兩個(gè)字符串是否由相同字母組成。 字符a到字符z的ASCII是26個(gè)連續(xù)的數(shù)值,所以字符a映射為下標(biāo)0,相應(yīng)的字符z映射為下標(biāo)25。

    2024年02月07日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包