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

leetcode:只出現(xiàn)一次的數(shù)字 Ⅲ(詳解)

這篇具有很好參考價值的文章主要介紹了leetcode:只出現(xiàn)一次的數(shù)字 Ⅲ(詳解)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言:內(nèi)容包括:題目,代碼實現(xiàn),大致思路,代碼解讀

題目:

給你一個整數(shù)數(shù)組?nums,其中恰好有兩個元素只出現(xiàn)一次,其余所有元素均出現(xiàn)兩次。 找出只出現(xiàn)一次的那兩個元素。你可以按 任意順序 返回答案。

你必須設計并實現(xiàn)線性時間復雜度的算法且僅使用常量額外空間來解決此問題。

示例 1:

輸入:nums = [1,2,1,3,2,5]
輸出:[3,5]
解釋:[5, 3] 也是有效的答案。
示例 2:

輸入:nums = [-1,0]
輸出:[-1,0]
示例 3:

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

代碼實現(xiàn):

int* singleNumber(int* nums, int numsSize, int* returnSize)
{
    int ret = 0;
    int i = 0;
    for(i=0;i<numsSize;i++)
    {
        ret^=nums[i];
    }

    int pos = 0;
    for(i=0;i<32;i++)
    {
        if(((ret>>i)&1)==1)
        {
            pos = i;
            break;
        }
    }

    int*ret2 = (int*)calloc(2,sizeof(int));
    for(i=0;i<numsSize;i++)
    {
        if((nums[i]>>pos)&1==1)
        {
            ret2[0]^=nums[i];
        }
        else
        {
            ret2[1]^=nums[i];
        }
    }
    *returnSize = 2;
    return ret2;

}

大致思路:

分組異或:

僅有兩個數(shù)字只出現(xiàn)一次,其他數(shù)字均成對出現(xiàn)

異或:相同為0,相異為1

1 數(shù)組中的所有數(shù)字異或在一起,結果=只出現(xiàn)一次的兩個數(shù)字異或在一起

? ?比如:1,2,1,3,2,5

? ?異或:1^1^2^2^3^5 = 3^5

? ?3的二進制:0 1 1

? ?5的二進制:1 0 1

leetcode:只出現(xiàn)一次的數(shù)字 Ⅲ(詳解)

?藍色圈/紅色圈的這一位,若是某個數(shù)字在這一位上的值是1,成為一組

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 若是某個數(shù)字在這一位上的值是0,成為另外一組

?

2 將這兩個數(shù)字分至不同組,每組異或,結果 = 要找的數(shù)字

? ?比如:1,2,1,3,2,5

? ?分組只需要將只出現(xiàn)過一次的3和5分開即可

? ?第一組(紅色圈的位置上的值為0):1 1 5?異或:1^1^3 = 0^3 = 3

? ?第二組(紅色圈的位置上的值為1):2 2 3? 異或:2^2^5 = 0^5 = 5

代碼解讀:

part1

    int ret = 0;
    int i = 0;
    for(i=0;i<numsSize;i++)
    {
        ret^=nums[i];
    }

將數(shù)組中的所有數(shù)字異或在一起,最終只會留下要找的兩個數(shù)字異或在一起的結果

有了這個結果,我們就能將這兩個數(shù)字分開至不同的組

part2

    int pos = 0;
    for(i=0;i<32;i++)
    {
        if(((ret>>i)&1)==1)//找出能夠區(qū)分兩個僅出現(xiàn)過一次數(shù)字的位置
        {
            pos = i;
            break;
        }
    }

ret:僅出現(xiàn)過一次的兩個數(shù)字異或在一起的結果

ret共有32個比特位,每一個比特位都要來到最低位(第i個比特位右移i位來到最低位)與1按位與

leetcode:只出現(xiàn)一次的數(shù)字 Ⅲ(詳解)

按位與:&,兩個都是1,則結果為1,只要有一個為0,則結果為0文章來源地址http://www.zghlxwxcb.cn/news/detail-408087.html

part3

    int*ret2 = (int*)calloc(2,sizeof(int));
    for(i=0;i<numsSize;i++)
    {
        if((nums[i]>>pos)&1==1)//讓pos位上的值為1的所有數(shù)字異或成為一組
        {
            ret2[0]^=nums[i];
        }
        else
        {
            ret2[1]^=nums[i]; //讓讓pos位上的值為0的所有數(shù)字異或成為一組
        }
    }
    *returnSize = 2;
    return ret2;

到了這里,關于leetcode:只出現(xiàn)一次的數(shù)字 Ⅲ(詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Leetcode—137.只出現(xiàn)一次的數(shù)字II【中等】

    Leetcode—137.只出現(xiàn)一次的數(shù)字II【中等】

    實現(xiàn)代碼 為什么要用unsigned int呢,因為或左移溢出報錯,例如, Line 13: Char 13: runtime error: left shift of 2147483646 by 1 places cannot be represented in type ‘int’ [solution.c] 左移的高位如果超過符號位,就會報錯。因此要用類型強制轉換來 unsigned 來接住。 提交結果 解題思想 參考的是這兩

    2024年02月07日
    瀏覽(16)
  • 力扣(LeetCode)算法_C++—— 只出現(xiàn)一次的數(shù)字

    給你一個 非空 整數(shù)數(shù)組 nums ,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。 你必須設計并實現(xiàn)線性時間復雜度的算法來解決此問題,且該算法只使用常量額外空間。 示例 1 : 輸入:nums = [2,2,1] 輸出:1 示例 2 : 輸入:nums = [4,

    2024年02月09日
    瀏覽(20)
  • 【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗)

    【LeetCode】260.只出現(xiàn)一次的數(shù)字 III(找出單身狗)

    ??? 樊梓慕: 個人主頁 ? ?? 個人專欄: 《C語言》《數(shù)據(jù)結構》《藍橋杯試題》 ?? 每一個不曾起舞的日子,都是對生命的辜負。 目錄 前言: 一只單身狗: 兩只單身狗: 本篇主要講解LeetCode上的經(jīng)典題型:只出現(xiàn)一次的數(shù)字,我匯總了該類問題的兩種情況(一只單身狗

    2024年02月16日
    瀏覽(20)
  • 2023年7月3日leetcode每日一題打卡——136.只出現(xiàn)一次的數(shù)字

    136. 只出現(xiàn)一次的數(shù)字 - 力扣(LeetCode) 給你一個 非空 整數(shù)數(shù)組 nums ,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。 你必須設計并實現(xiàn) 線性時間復雜度 的算法來解決此問題,且該算法 只使用常量額外空間 。 示例1: 示例2: 示

    2024年02月12日
    瀏覽(23)
  • 【LeetCode】每日一題&最后一個單詞的長度&投票法求解多數(shù)元素&異或操作符巧解只出現(xiàn)一次的數(shù)字&整數(shù)反轉

    ========================================================================= 個人主頁直達: 小白不是程序媛 LeetCode系列專欄: LeetCode刷題掉發(fā)記 ========================================================================= 目錄 LeetCode 58.最后一個單詞的長度 LeetCode169.多數(shù)元素 LeetCode 136.出現(xiàn)一次的數(shù)字 LeetCode 7.整數(shù)

    2024年02月08日
    瀏覽(25)
  • 只出現(xiàn)一次的數(shù)字

    問題: 給你一個? 非空 ?整數(shù)數(shù)組? nums ?,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。 你必須設計并實現(xiàn)線性時間復雜度的算法來解決此問題,且該算法只使用常量額外空間。 示例: 示例 1 : 示例 2 : 示例 3 : 思想: 由于

    2024年02月07日
    瀏覽(23)
  • 只出現(xiàn)一次的數(shù)字——力扣136
  • 每日一題——只出現(xiàn)一次的數(shù)字

    每日一題——只出現(xiàn)一次的數(shù)字

    題目鏈接 要求為線性時間復雜度,即 時間復雜度為O(n) ,那么我們就不能用簡單的兩層循環(huán)來解決問題 要求只能使用常量額外空間,即 空間復雜度為O(1) ,那么我們就不能額外開辟一個數(shù)組來記錄每個元素出現(xiàn)的次數(shù) 這里,給大家介紹一個全新的方法:位運算——異或^ 注

    2024年02月15日
    瀏覽(19)
  • 【舉一反三】只出現(xiàn)一次的數(shù)字

    【舉一反三】只出現(xiàn)一次的數(shù)字

    ?本文,講位運算——異或運算。因為題干中說明要線性時間復雜度,所以采用位運算進行操作,而沒有采用哈希表。 目錄 1.只出現(xiàn)一次的數(shù)字 I ?2.只出現(xiàn)一次的數(shù)字 II ?3.只出現(xiàn)一次的數(shù)字 III 136. 只出現(xiàn)一次的數(shù)字 - 力扣(LeetCode) 題目: 給你一個 非空整數(shù)數(shù)組 nums ,除

    2023年04月15日
    瀏覽(28)
  • lc137. 只出現(xiàn)一次的數(shù)字 II

    lc137. 只出現(xiàn)一次的數(shù)字 II

    ? 數(shù)組排序 ,既和前不一樣又和后不一樣的就是唯一的一個 哈希表 位運算? ? 只有一個數(shù)出現(xiàn)了一次,其他數(shù)都出現(xiàn)了三次,那么別的數(shù)的 每個二進制位 加起來的和除3一定為0。 所以如果某個二進制位取余3不為0那么這個數(shù)就是所要求的答案的某個二進制位,再把它導出來

    2024年02月13日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包