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

( 數(shù)組和矩陣) 645. 錯(cuò)誤的集合 ——【Leetcode每日一題】

這篇具有很好參考價(jià)值的文章主要介紹了( 數(shù)組和矩陣) 645. 錯(cuò)誤的集合 ——【Leetcode每日一題】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?645. 錯(cuò)誤的集合

難度:簡(jiǎn)單

集合 s 包含從 1n 的整數(shù)。不幸的是,因?yàn)閿?shù)據(jù)錯(cuò)誤,導(dǎo)致集合里面某一個(gè)數(shù)字復(fù)制了成了集合里面的另外一個(gè)數(shù)字的值,導(dǎo)致集合 丟失了一個(gè)數(shù)字 并且 有一個(gè)數(shù)字重復(fù) 。

給定一個(gè)數(shù)組 nums 代表了集合 S 發(fā)生錯(cuò)誤后的結(jié)果。

請(qǐng)你找出重復(fù)出現(xiàn)的整數(shù),再找到丟失的整數(shù),將它們以數(shù)組的形式返回。

示例 1:

輸入:nums = [1,2,2,4]
輸出:[2,3]

示例 2:

輸入:nums = [1,1]
輸出:[1,2]

提示:

  • 2 < = n u m s . l e n g t h < = 1 0 4 2 <= nums.length <= 10^4 2<=nums.length<=104
  • 1 < = n u m s [ i ] < = 1 0 4 1 <= nums[i] <= 10^4 1<=nums[i]<=104

??思路:

法一:交換數(shù)組元素

最直接的方法是先對(duì)數(shù)組進(jìn)行排序,這種方法時(shí)間復(fù)雜度為 O ( n l o g n ) O(nlogn) O(nlogn)。本題可以以 O ( n ) O(n) O(n) 的時(shí)間復(fù)雜度、 O ( 1 ) O(1) O(1) 空間復(fù)雜度來(lái)求解。

  • 主要思想是通過(guò)交換數(shù)組元素,使得數(shù)組上的元素在正確的位置上;
  • 這樣只有 重復(fù)的數(shù) 出現(xiàn)在 丟失整數(shù) 的位置上。

法二:哈希表

重復(fù)的數(shù)字在數(shù)組中出現(xiàn) 2 次,丟失的數(shù)字在數(shù)組中出現(xiàn) 0次,其余的每個(gè)數(shù)字在數(shù)組中出現(xiàn) 1 次。因此可以使用哈希表記錄每個(gè)元素在數(shù)組中是否出現(xiàn)

  • 如果出現(xiàn)兩次,則找到了重復(fù)的數(shù)
  • 將所有數(shù)都存到哈希表,再遍歷哈希表,則可找到丟失的數(shù);

??代碼:(Java、C++)

法一:交換數(shù)組元素
Java

class Solution {
    public int[] findErrorNums(int[] nums) {
        for(int i = 0; i < nums.length; i++){
            while(nums[i] != i + 1 && nums[i] != nums[nums[i] - 1]){
                swap(nums, i, nums[i] - 1);
            }
        }
        for(int i = 1; i <= nums.length; i++){
            if(nums[i - 1] != i){
                return new int[]{nums[i - 1], i};
            }
        }
        return null;
    }
    private void swap(int[] nums, int i, int j){
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}

C++

class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) {
        for(int i = 0; i < nums.size(); i++){
            while(nums[i] != i + 1 && nums[i] != nums[nums[i] - 1]){
                swap(nums, i, nums[i] - 1);
            }
        }
        for(int i = 1; i <= nums.size(); i++){
            if(nums[i - 1] != i){
                return {nums[i - 1], i};
            }
        }
        return {};
    }
    void swap(vector<int>& nums, int i, int j){
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
};

法二:哈希表
Java

class Solution {
    public int[] findErrorNums(int[] nums) {
        HashSet<Integer> s = new HashSet<>();
        int repeat = 0, lose = 0;
        for(int num : nums){
            if(s.contains(num)) repeat = num;
            s.add(num);
        }
        for(int i = 1; i <= nums.length; i++){
            if(!s.contains(i)){
                lose = i;
                break;
            }
        }
        return new int[]{repeat, lose};
    }
}

C++

class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) {
        unordered_set<int> s;
        int repeat = 0, lose = 0;
        for(int num : nums){
            if(s.find(num) != s.end()) repeat = num;
            s.insert(num);
        }
        for(int i = 1; i <= nums.size(); i++){
            if(s.find(i) == s.end()){
                lose = i;
                break;
            }
        }
        return {repeat, lose};
    }
};
?? 運(yùn)行結(jié)果:

( 數(shù)組和矩陣) 645. 錯(cuò)誤的集合 ——【Leetcode每日一題】

?? 復(fù)雜度分析:
  • 時(shí)間復(fù)雜度 O ( n ) O(n) O(n),其中 n 為數(shù)組的長(zhǎng)度。
  • 空間復(fù)雜度 O ( 1 ) O(1) O(1),法一只需常量級(jí)空間;而哈希表需要?jiǎng)?chuàng)建大小為 O ( n ) O(n) O(n) 的哈希表,空間復(fù)雜度為 O ( n ) O(n) O(n)。

題目來(lái)源:力扣。

放棄一件事很容易,每天能堅(jiān)持一件事一定很酷,一起每日一題吧!
關(guān)注我 leetCode專(zhuān)欄,每日更新!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440959.html

注: 如有不足,歡迎指正!

到了這里,關(guān)于( 數(shù)組和矩陣) 645. 錯(cuò)誤的集合 ——【Leetcode每日一題】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • (數(shù)組與矩陣) 劍指 Offer 03. 數(shù)組中重復(fù)的數(shù)字 ——【Leetcode每日一題】

    (數(shù)組與矩陣) 劍指 Offer 03. 數(shù)組中重復(fù)的數(shù)字 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 找出數(shù)組中重復(fù)的數(shù)字。 在一個(gè)長(zhǎng)度為 n 的數(shù)組 nums 里的所有數(shù)字都在 0~n-1 的范圍內(nèi)。數(shù)組中某些數(shù)字是重復(fù)的,但不知道有幾個(gè)數(shù)字重復(fù)了,也不知道每個(gè)數(shù)字重復(fù)了幾次。請(qǐng)找出數(shù)組中任意一個(gè)重復(fù)的數(shù)字。 示例 1: 輸入 : [2, 3, 1, 0, 2, 5, 3] 輸出 :2 或

    2024年02月16日
    瀏覽(20)
  • ( 數(shù)組和矩陣) 485. 最大連續(xù) 1 的個(gè)數(shù) ——【Leetcode每日一題】

    ( 數(shù)組和矩陣) 485. 最大連續(xù) 1 的個(gè)數(shù) ——【Leetcode每日一題】

    難度:簡(jiǎn)單 給定一個(gè)二進(jìn)制數(shù)組 nums , 計(jì)算其中最大連續(xù) 1 的個(gè)數(shù)。 示例 1: 輸入:nums = [1,1,0,1,1,1] 輸出:3 解釋?zhuān)洪_(kāi)頭的兩位和最后的三位都是連續(xù) 1 ,所以最大連續(xù) 1 的個(gè)數(shù)是 3. 示例 2: 輸入:nums = [1,0,1,1,0,1] 輸出:2 提示: 1 = n u m s . l e n g t h = 1 0 5 1 = nums.length = 10^5

    2024年02月08日
    瀏覽(27)
  • ( 數(shù)組和矩陣) 667. 優(yōu)美的排列 II ——【Leetcode每日一題】

    ( 數(shù)組和矩陣) 667. 優(yōu)美的排列 II ——【Leetcode每日一題】

    難度:中等 給你兩個(gè)整數(shù) n 和 k ,請(qǐng)你構(gòu)造一個(gè)答案列表 answer ,該列表應(yīng)當(dāng)包含從 1 到 n 的 n 個(gè)不同正整數(shù),并同時(shí)滿(mǎn)足下述條件: 假設(shè)該列表是 answer = [a1, a2, a3, ... , an] ,那么列表 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中應(yīng)該有且僅有 k 個(gè)不同整數(shù)。 返回列表 answer

    2024年02月06日
    瀏覽(20)
  • ( 數(shù)組和矩陣) 378. 有序矩陣中第 K 小的元素 ——【Leetcode每日一題】

    ( 數(shù)組和矩陣) 378. 有序矩陣中第 K 小的元素 ——【Leetcode每日一題】

    難度:中等 給你一個(gè) n x n n x n n x n 矩陣 m a t r i x matrix ma t r i x ,其中每行和每列元素均按升序排序,找到矩陣中第 k 小的元素。 請(qǐng)注意,它是 排序后 的第 k 小元素,而不是第 k 個(gè) 不同 的元素。 你必須找到一個(gè)內(nèi)存復(fù)雜度優(yōu)于 O ( n 2 ) O(n^2) O ( n 2 ) 的解決方案。 示例 1:

    2024年02月14日
    瀏覽(26)
  • (數(shù)組) 941. 有效的山脈數(shù)組 ——【Leetcode每日一題】

    (數(shù)組) 941. 有效的山脈數(shù)組 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 給定一個(gè)整數(shù)數(shù)組 arr ,如果它是有效的山脈數(shù)組就返回 true ,否則返回 false 。 讓我們回顧一下,如果 arr 滿(mǎn)足下述條件,那么它是一個(gè)山脈數(shù)組: arr.length = 3 在 0 i arr.length - 1 條件下,存在 i 使得: arr[0] arr[1] ... arr[i-1] arr[i] arr[i] arr[i+1] ... arr[arr.length - 1] 示例

    2024年02月09日
    瀏覽(36)
  • Leetcode每日一題——“合并兩個(gè)有序數(shù)組”

    Leetcode每日一題——“合并兩個(gè)有序數(shù)組”

    各位CSDN的uu們你們好呀,又到小雅蘭的愉快題解時(shí)候啦,今天,我們的題目?jī)?nèi)容是合并兩個(gè)有序數(shù)組,下面,讓我們進(jìn)入合并兩個(gè)有序數(shù)組的世界吧 示例 1: 輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 輸出:[1,2,2,3,5,6] 解釋?zhuān)盒枰喜?[1,2,3] 和 [2,5,6] 。 合并結(jié)果是 [ 1,2

    2023年04月24日
    瀏覽(37)
  • LeetCode每日一題——1331.數(shù)組序號(hào)轉(zhuǎn)換

    LeetCode每日一題——1331.數(shù)組序號(hào)轉(zhuǎn)換

    題目傳送門(mén) 給你一個(gè)整數(shù)數(shù)組 arr ,請(qǐng)你將數(shù)組中的每個(gè)元素替換為它們排序后的序號(hào)。 序號(hào)代表了一個(gè)元素有多大。序號(hào)編號(hào)的規(guī)則如下: 序號(hào)從 1 開(kāi)始編號(hào)。 一個(gè)元素越大,那么序號(hào)越大。如果兩個(gè)元素相等,那么它們的序號(hào)相同。 每個(gè)數(shù)字的序號(hào)都應(yīng)該盡可能地小。

    2024年02月14日
    瀏覽(25)
  • 【LeetCode每日一題】——1331.數(shù)組序號(hào)轉(zhuǎn)換

    【LeetCode每日一題】——1331.數(shù)組序號(hào)轉(zhuǎn)換

    排序 簡(jiǎn)單 1331.數(shù)組序號(hào)轉(zhuǎn)換 給你一個(gè)整數(shù)數(shù)組 arr ,請(qǐng)你將數(shù)組中的每個(gè)元素替換為它們排序后的序號(hào)。 序號(hào)代表了一個(gè)元素有多大。序號(hào)編號(hào)的規(guī)則如下: 序號(hào)從 1 開(kāi)始編號(hào)。 一個(gè)元素越大,那么序號(hào)越大。如果兩個(gè)元素相等,那么它們的序號(hào)相同。 每個(gè)數(shù)字的序號(hào)都

    2024年02月12日
    瀏覽(16)
  • 645. 錯(cuò)誤的集合

    645. 錯(cuò)誤的集合

    645. 錯(cuò)誤的集合

    2024年02月15日
    瀏覽(15)
  • 【LeetCode每日一題】——566.重塑矩陣

    【LeetCode每日一題】——566.重塑矩陣

    矩陣 簡(jiǎn)單 566.重塑矩陣 在 MATLAB 中,有一個(gè)非常有用的函數(shù) reshape ,它可以將一個(gè) m x n 矩陣重塑為另一個(gè)大小不同(r x c)的新矩陣,但保留其原始數(shù)據(jù)。 給你一個(gè)由二維數(shù)組 mat 表示的 m x n 矩陣,以及兩個(gè)正整數(shù) r 和 c ,分別表示想要的重構(gòu)的矩陣的行數(shù)和列數(shù)。 重構(gòu)后

    2024年02月14日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包