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

leetcode之只出現(xiàn)一次的數(shù)字

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

今天為大家分享的是關(guān)于在數(shù)組中找到只出現(xiàn)一次數(shù)字的系列題目,我將使用c跟Java來實現(xiàn),希望我的分享能夠幫助到大家。

初階查找單身狗

第一道題目是一個數(shù)組中只出有一個出現(xiàn)了一次的數(shù)字,也就是有一個單身狗。這是題目鏈接leetcode之只出現(xiàn)一次的數(shù)字

題目要求:
給你一個 非空 整數(shù)數(shù)組 nums ,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。

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

理解題目

根據(jù)題目給出的要求我們可以知道這個題目要求我們寫的代碼時間復(fù)雜度不超過O(N),時間復(fù)雜度也不能超過O(N),也就是說我們要盡可能的做到遍歷數(shù)組一遍并且不額外創(chuàng)建一個同樣大小的數(shù)組來解決這個題目。

做題思路

在做這個題之前,我們需要知道一個知識,那就是異或(^)位運算。二進(jìn)制位相同為0,相異為1。0異或任何數(shù)結(jié)果還是那個數(shù),兩個相同的數(shù)異或結(jié)果為0。也就是說這個題我們只需要將數(shù)組的每一個元素全部都異或一遍,得到的最終結(jié)果就是那個只出現(xiàn)了一次的數(shù)字。

C語言代碼實現(xiàn)

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

leetcode之只出現(xiàn)一次的數(shù)字

Java代碼實現(xiàn)

class Solution {
    public int singleNumber(int[] nums) {
        int ret = 0;
        for(int i = 0; i<nums.length; i++) {
            ret^=nums[i];
        }

        return ret;
    }
}

leetcode之只出現(xiàn)一次的數(shù)字
這個題想必大家應(yīng)該很容易理解吧,那么我們再來看一道進(jìn)階的找單身狗的問題。

進(jìn)階找單身狗

leedcode之只出現(xiàn)一次的數(shù)字(進(jìn)階)

題目要求

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

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

做題思路

這個題目跟上面其實思路是一樣的,只不過在這個數(shù)組里面有兩個只出現(xiàn)了一次的數(shù)字,我們還只是全部將他們異或一下,是不能得到最終結(jié)果的。所以這里我們需要稍稍做點改變,因為你數(shù)組里面如果只有一個單身狗,那么就是只需要全部異或一遍,那么如果數(shù)組里面有兩個的時候我們只需要將兩個只出現(xiàn)了一次的數(shù)字形象的放置在兩個不同的數(shù)組中,其他兩兩相同的數(shù)字只需要在一個數(shù)組中就可以了。那么想要做出來這道題的關(guān)鍵其實就是如何將這兩個只出現(xiàn)了一次的數(shù)字放在不同的數(shù)組中。

同樣的我們還是先將這個數(shù)組的所有元素異或一下,這個異或的結(jié)果其實就是那兩個只出現(xiàn)了一次的數(shù)字以獲得結(jié)果。然后我們再來看這個結(jié)果的二進(jìn)制位,因為我們前面說了,異或操作二進(jìn)制位相同為0,相異為1,我們只需要找到二進(jìn)制位1的地方,然后再將數(shù)組中所有元素相同的地方二進(jìn)制位0的放一組,為1的放另一組,最后再分別異或就找到了那兩個只出現(xiàn)了一次的數(shù)字。

C語言代碼實現(xiàn)

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* singleNumber(int* nums, int numsSize, int* returnSize){
    //動態(tài)開辟一個兩個元素為0的數(shù)組,用來存放兩個單身狗
    int* ans = (int*)calloc(2,sizeof(int));  
    int ret = 0;
    for(int i =0 ;i<numsSize; i++)
    {
        ret^=nums[i];
    }
    //pos用來記錄ret中哪個二進(jìn)制位為1
    int pos = 0;
    for(int i = 0; i<32; i++)
    {
        if((ret>>i)&1 == 1)
        {
            pos = i;
            break;
        }
    }
    for(int i = 0; i<numsSize; i++)
    {
        if((nums[i] >> pos)&1 == 1)
        {
            ans[0]^=nums[i];
        }
        else
        {
            ans[1]^=nums[i];
        }
    }

    *returnSize = 2;
    return ans;
}

leetcode之只出現(xiàn)一次的數(shù)字

Java代碼實現(xiàn)

class Solution {
    public int[] singleNumber(int[] nums) {
        int[] ans = new int[]{0,0};  
        int ret = 0;
        for(int i  =0; i<nums.length; i++) {
            ret^=nums[i];
        }
        int pos = 0;
        for(int i = 0; i<32; i++) {
            if(((ret>>i)&1) == 1) {
                pos = i;
                break;
            }
        }
        for(int i = 0; i<nums.length; i++) {
            if(((nums[i]>>pos)&1) == 1) {
                ans[0]^=nums[i];
            }else{
                ans[1]^=nums[i];
            }
        }
        return ans;
    }
}

leetcode之只出現(xiàn)一次的數(shù)字

小結(jié)

那么這些就是我今天為大家分享的知識,如有錯誤,請隨時指出,感謝大家的觀看。文章來源地址http://www.zghlxwxcb.cn/news/detail-406686.html

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

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

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

相關(guān)文章

  • 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] 左移的高位如果超過符號位,就會報錯。因此要用類型強(qiáng)制轉(zhuǎn)換來 unsigned 來接住。 提交結(jié)果 解題思想 參考的是這兩

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

    給你一個 非空 整數(shù)數(shù)組 nums ,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。 你必須設(shè)計并實現(xiàn)線性時間復(fù)雜度的算法來解決此問題,且該算法只使用常量額外空間。 示例 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ù)結(jié)構(gòu)》《藍(lán)橋杯試題》 ?? 每一個不曾起舞的日子,都是對生命的辜負(fù)。 目錄 前言: 一只單身狗: 兩只單身狗: 本篇主要講解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)了一次的元素。 你必須設(shè)計并實現(xiàn) 線性時間復(fù)雜度 的算法來解決此問題,且該算法 只使用常量額外空間 。 示例1: 示例2: 示

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

    ========================================================================= 個人主頁直達(dá): 小白不是程序媛 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)了一次的元素。 你必須設(shè)計并實現(xiàn)線性時間復(fù)雜度的算法來解決此問題,且該算法只使用常量額外空間。 示例: 示例 1 : 示例 2 : 示例 3 : 思想: 由于

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

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

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

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

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

    ?本文,講位運算——異或運算。因為題干中說明要線性時間復(fù)雜度,所以采用位運算進(jìn)行操作,而沒有采用哈希表。 目錄 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ù)的 每個二進(jìn)制位 加起來的和除3一定為0。 所以如果某個二進(jìn)制位取余3不為0那么這個數(shù)就是所要求的答案的某個二進(jìn)制位,再把它導(dǎo)出來

    2024年02月13日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包