最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言題解LeetCode268丟失的數(shù)字示例詳解

 更新時間:2022年12月30日 11:23:55   作者:劉09k11  
這篇文章主要為大家介紹了Go語言題解LeetCode268丟失的數(shù)字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

題目描述

原題鏈接 :

268. 丟失的數(shù)字

給定一個包含 [0, n] 中 n 個數(shù)的數(shù)組 nums ,找出 [0, n] 這個范圍內(nèi)沒有出現(xiàn)在數(shù)組中的那個數(shù)。

示例 1:

輸入:nums = [3,0,1]
輸出:2
解釋:n = 3,因?yàn)橛?3 個數(shù)字,所以所有的數(shù)字都在范圍 [0,3] 內(nèi)。2 是丟失的數(shù)字,因?yàn)樗鼪]有出現(xiàn)在 nums 中。

示例 2:

輸入:nums = [0,1]
輸出:2
解釋:n = 2,因?yàn)橛?2 個數(shù)字,所以所有的數(shù)字都在范圍 [0,2] 內(nèi)。2 是丟失的數(shù)字,因?yàn)樗鼪]有出現(xiàn)在 nums 中。

示例 3:

輸入:nums = [9,6,4,2,3,5,7,0,1]
輸出:8
解釋:n = 9,因?yàn)橛?9 個數(shù)字,所以所有的數(shù)字都在范圍 [0,9] 內(nèi)。8 是丟失的數(shù)字,因?yàn)樗鼪]有出現(xiàn)在 nums 中。

示例 4:

輸入:nums = [0]
輸出:1
解釋:n = 1,因?yàn)橛?1 個數(shù)字,所以所有的數(shù)字都在范圍 [0,1] 內(nèi)。1 是丟失的數(shù)字,因?yàn)樗鼪]有出現(xiàn)在 nums 中。

提示:

n == nums.length

1 <= n <= 10^4

0 <= nums[i] <= n

nums 中的所有數(shù)字都 獨(dú)一無二  

進(jìn)階:你能否實(shí)現(xiàn)線性時間復(fù)雜度、僅使用額外常數(shù)空間的算法解決此問題?

思路分析

拿到這個題目,發(fā)現(xiàn)其是在[0,n]范圍內(nèi)給出n個數(shù)字,也就是說,這個是高度適配將數(shù)組進(jìn)行排序的想法的。 對于完整的數(shù)組,其排序后應(yīng)該是一個跟下標(biāo)值完全一致的數(shù)組集合。 那么解法就很簡單了,尋找第一個跟元素不匹配的下標(biāo),其就是缺失的數(shù)字;

AC 代碼

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        nums.sort()
        for i in range(len(nums)):
            if nums[i] != i:
                return i
        return len(nums)

異或兩遍 - 丟失的數(shù)字

解題思路

異或是一個可交換順序的操作。同一個數(shù)字異或兩遍等于零。

所以我們先求出數(shù)據(jù)的范圍,直接找最大的數(shù)即可。 這里需要注意,如果最大的數(shù)字小于數(shù)組長度,則缺失的數(shù)字是最大的數(shù)字+1。

然后我們對 [0, n] 的所有數(shù)字累計(jì)異或一邊,再對數(shù)組中的所有元素也異或一遍,最后就只剩下唯一一個沒有出現(xiàn)的數(shù)字了。因?yàn)槠渌麛?shù)字都出現(xiàn)了兩遍。

代碼

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n = 0;
        int ans = 0;
        for (auto num: nums) {
            n = max(n, num);
            ans ^= num;
        }
        if (nums.size() > n) n = nums.size();
        for (int i = 0; i <= n; i++) {
            ans ^= i;
        }
        return ans;
    }
};

C++ 排序二分、加減法、異或 - 丟失的數(shù)字

解題思路:

看到該題第一個想法就是二分法,首先給數(shù)字排序,然后通過mid值判斷在左邊還是在右邊,nums[mid] == mid說明在右邊,否則在左邊,但是最后還要注意缺失的是最后一個數(shù)的情況,那么我們就要根據(jù)最后一個數(shù)進(jìn)行判斷,再進(jìn)行返回,代碼如下:

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int left = 0, right = nums.size() - 1;
        while(left < right) {
            int mid = (left + right) / 2;
            if(nums[mid] == mid) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return (right == nums.size() - 1 && nums[right] == right) ? right + 1 : right;
    }
};

但是顯然沒必要那么復(fù)雜,時間效率低,最全局的想法就是把所有下標(biāo)加起來并且把數(shù)組都減去,剩下的就是丟失的數(shù)字,代碼如下:

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int total = 0;
        int i;
        for(i = 0; i < nums.size(); i ++) {
            total += i;
            total -= nums[i];
        }
        total += i;
        return total;
    }
};

異或的方法其實(shí)和加減方法實(shí)現(xiàn)方式一樣,只是底層原理不同罷了,思路都是抵消掉相同的,留下唯一一個單獨(dú)的,代碼如下:

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int total = 0;
        int i;
        for(i = 0; i < nums.size(); i ++) {
            total ^= i;
            total ^= nums[i];
        }
        total ^= i;
        return total;
    }
};

以上就是Go語言題解LeetCode268丟失的數(shù)字示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go題解丟失數(shù)字示例的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    本文主要介紹了Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • go語言多線程操作實(shí)現(xiàn)

    go語言多線程操作實(shí)現(xiàn)

    多線程是一種使程序能夠并行處理多個任務(wù)的技術(shù),Go語言通過goroutine和channel提供了一種相比傳統(tǒng)線程更輕量級、易于管理的并發(fā)實(shí)現(xiàn)方式,本文就來介紹一下go語言多線程操作實(shí)現(xiàn),感興趣的可以了解一下
    2024-11-11
  • Go語言中關(guān)閉帶緩沖區(qū)的頻道實(shí)例分析

    Go語言中關(guān)閉帶緩沖區(qū)的頻道實(shí)例分析

    這篇文章主要介紹了Go語言中關(guān)閉帶緩沖區(qū)的頻道,實(shí)例分析了帶緩沖區(qū)頻道的原理與用法,以及關(guān)閉帶緩沖區(qū)頻道的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go語言常見數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    Go語言常見數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    這篇文章主要為大家學(xué)習(xí)介紹了Go語言中的常見數(shù)據(jù)結(jié)構(gòu)(channal、slice和map)的實(shí)現(xiàn),文中的示例代碼簡潔易懂,需要的可以參考一下
    2023-07-07
  • Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    分布式鎖是一種在分布式系統(tǒng)中用于控制并發(fā)訪問的機(jī)制,ZooKeeper?和?Redis?都是常用的實(shí)現(xiàn)分布式鎖的工具,本文就來使用Zookeeper實(shí)現(xiàn)分布式鎖,希望對大家有所幫助
    2024-02-02
  • Golang反射獲取結(jié)構(gòu)體的值和修改值的代碼示例

    Golang反射獲取結(jié)構(gòu)體的值和修改值的代碼示例

    這篇文章主要給大家介紹了golang反射獲取結(jié)構(gòu)體的值和修改值的代碼示例及演示效果,對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考閱讀本文
    2023-08-08
  • 安裝Sublime?Text支持Go插件的方法步驟

    安裝Sublime?Text支持Go插件的方法步驟

    本文主要介紹了安裝Sublime?Text支持Go插件的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Golang開發(fā)中如何解決共享變量問題

    Golang開發(fā)中如何解決共享變量問題

    Go提供了傳統(tǒng)通過共享變量,也就是共享內(nèi)存的方式來實(shí)現(xiàn)并發(fā)。這篇文章會介紹 Go提供的相關(guān)機(jī)制,對Golang共享變量相關(guān)知識感興趣的朋友一起看看吧
    2021-09-09
  • Go語言實(shí)現(xiàn)遺傳算法的實(shí)例代碼

    Go語言實(shí)現(xiàn)遺傳算法的實(shí)例代碼

    Go 是一個開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。本文將重點(diǎn)介紹如何用Go語言實(shí)現(xiàn)遺傳算法。如果你還沒有參加過GoLang Tour,我還建議你快速看一下這門語言的介紹
    2017-11-11
  • GO語言的控制語句詳解包括GO語言的指針語法

    GO語言的控制語句詳解包括GO語言的指針語法

    這篇文章主要介紹了GO語言的控制語句詳解包括GO語言的指針語法,GO語言switch結(jié)構(gòu),GO語言for的4種結(jié)構(gòu)需要的朋友可以參考下
    2022-12-12

最新評論

鹿邑县| 日喀则市| 齐齐哈尔市| 祁东县| 巢湖市| 湖口县| 东港市| 海门市| 姜堰市| 巴林左旗| 上思县| 西吉县| 中西区| 桐乡市| 阳信县| 敖汉旗| 胶南市| 沁阳市| 峨山| 德钦县| 溆浦县| 台北县| 沈丘县| 汝阳县| 平凉市| 安达市| 锦屏县| 太仆寺旗| 安阳县| 乌拉特后旗| 蓬安县| 红安县| 田林县| 石门县| 图们市| 海南省| 灵川县| 平塘县| 清丰县| 鞍山市| 资中县|