欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

  1. <thead id="ssm0x"></thead>
      1. <bdo id="ssm0x"></bdo>
        <thead id="ssm0x"><video id="ssm0x"></video></thead>

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

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

          題目描述

          原題鏈接 :

          268. 丟失的數(shù)字

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

          示例 1:

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

          示例 2:

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

          示例 3:

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

          示例 4:

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

          提示:

          n == nums.length

          1 <= n <= 10^4

          0 <= nums[i] <= n

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

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

          思路分析

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

          解題思路

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

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

          然后我們對(duì) [0, n] 的所有數(shù)字累計(jì)異或一邊,再對(duì)數(shù)組中的所有元素也異或一遍,最后就只剩下唯一一個(gè)沒(méi)有出現(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ù)字

          解題思路:

          看到該題第一個(gè)想法就是二分法,首先給數(shù)字排序,然后通過(guò)mid值判斷在左邊還是在右邊,nums[mid] == mid說(shuō)明在右邊,否則在左邊,但是最后還要注意缺失的是最后一個(gè)數(shù)的情況,那么我們就要根據(jù)最后一個(gè)數(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;
              }
          };
          

          但是顯然沒(méi)必要那么復(fù)雜,時(shí)間效率低,最全局的想法就是把所有下標(biāo)加起來(lái)并且把數(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)方式一樣,只是底層原理不同罷了,思路都是抵消掉相同的,留下唯一一個(gè)單獨(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語(yǔ)言題解LeetCode268丟失的數(shù)字示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go題解丟失數(shù)字示例的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

          相關(guān)文章

          • Golang高效解析和生成XML的示例詳解

            Golang高效解析和生成XML的示例詳解

            這篇文章將從Golang中處理XML的基本概念開(kāi)始,詳細(xì)介紹如何讀取和解析XML文件,然后轉(zhuǎn)向如何創(chuàng)建和輸出XML數(shù)據(jù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
            2024-01-01
          • Golang中異常處理機(jī)制詳解

            Golang中異常處理機(jī)制詳解

            這篇文章主要給大家介紹了關(guān)于Golang中異常處理機(jī)制的相關(guān)資料,其實(shí)Go語(yǔ)言的異常捕獲要比Python中簡(jiǎn)單的多,它沒(méi)有Python中那么多復(fù)雜的異常類型及繼承體系,需要的朋友可以參考下
            2021-06-06
          • Go語(yǔ)言開(kāi)發(fā)框架反射機(jī)制及常見(jiàn)函數(shù)示例詳解

            Go語(yǔ)言開(kāi)發(fā)框架反射機(jī)制及常見(jiàn)函數(shù)示例詳解

            這篇文章主要為大家介紹了Go語(yǔ)言開(kāi)發(fā)框架反射機(jī)制及常見(jiàn)函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
            2022-09-09
          • Golang實(shí)現(xiàn)支持多種類型的set

            Golang實(shí)現(xiàn)支持多種類型的set

            在項(xiàng)目開(kāi)發(fā)中,常常會(huì)用到set去重,為什么不寫(xiě)一個(gè)set呢,而且go現(xiàn)在支持了泛型,所以本文就來(lái)用Golang實(shí)現(xiàn)一個(gè)支持多種類型的set呢
            2023-05-05
          • golang如何優(yōu)雅的編寫(xiě)事務(wù)代碼示例

            golang如何優(yōu)雅的編寫(xiě)事務(wù)代碼示例

            這篇文章主要介紹了golang如何優(yōu)雅的編寫(xiě)事務(wù)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
            2020-05-05
          • Go語(yǔ)言開(kāi)發(fā)k8s之ConfigMap操作解析

            Go語(yǔ)言開(kāi)發(fā)k8s之ConfigMap操作解析

            這篇文章主要為大家介紹了Go語(yǔ)言開(kāi)發(fā)k8s之ConfigMap操作示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
            2023-06-06
          • 詳解Golang time包中的time.Duration類型

            詳解Golang time包中的time.Duration類型

            在日常開(kāi)發(fā)過(guò)程中,會(huì)頻繁遇到對(duì)時(shí)間進(jìn)行操作的場(chǎng)景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對(duì)時(shí)間的相關(guān)操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下
            2023-07-07
          • 讓goland支持proto文件類型的實(shí)現(xiàn)

            讓goland支持proto文件類型的實(shí)現(xiàn)

            這篇文章主要介紹了讓goland支持proto文件類型的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
            2020-12-12
          • Go1.18都出泛型了速來(lái)圍觀

            Go1.18都出泛型了速來(lái)圍觀

            泛型允許程序員在強(qiáng)類型程序設(shè)計(jì)語(yǔ)言中編寫(xiě)代碼時(shí)使用一些以后才指定的類型,在實(shí)例化時(shí)作為參數(shù)指明這些類型,本文通過(guò)例子給大家介紹下如何使用泛型,對(duì)Go1.18泛型相關(guān)知識(shí)感興趣的朋友一起看看吧
            2022-03-03
          • 幾個(gè)小技巧幫你實(shí)現(xiàn)Golang永久阻塞

            幾個(gè)小技巧幫你實(shí)現(xiàn)Golang永久阻塞

            Go 的運(yùn)行時(shí)的當(dāng)前設(shè)計(jì),假定程序員自己負(fù)責(zé)檢測(cè)何時(shí)終止一個(gè) goroutine 以及何時(shí)終止該程序。有時(shí)候我們需要的是使程序阻塞在這一行,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
            2021-12-12

          最新評(píng)論