【LeetCode】268. 丟失的數字

268. 丟失的數字

難度:簡單

題目

給定一個包含 [0, n]n 個數的數組 nums ,找出 [0, n] 這個范圍內沒有出現在數組中的那個數。

示例 1

輸入:nums = [3,0,1]
輸出:2
解釋:n = 3,因為有 3 個數字,所以所有的數字都在范圍 [0,3] 內。2 是丟失的數字,因為它沒有出現在 nums 中。

示例 2

輸入:nums = [0,1]
輸出:2
解釋:n = 2,因為有 2 個數字,所以所有的數字都在范圍 [0,2] 內。2 是丟失的數字,因為它沒有出現在 nums 中。

示例 3

輸入:nums = [9,6,4,2,3,5,7,0,1]
輸出:8
解釋:n = 9,因為有 9 個數字,所以所有的數字都在范圍 [0,9] 內。8 是丟失的數字,因為它沒有出現在 nums 中。

示例 4

輸入:nums = [0]
輸出:1
解釋:n = 1,因為有 1 個數字,所以所有的數字都在范圍 [0,1] 內。1 是丟失的數字,因為它沒有出現在 nums 中。

提示

  • n == nums.length
  • 1 <= n <= 10^4
  • 0 <= nums[i] <= n
  • nums 中的所有數字都 獨一無二

進階:你能否實現線性時間復雜度、僅使用額外常數空間的算法解決此問題?

個人題解

方法一:異或運算

異或性質:

0 ^ n = n

n ^ n = 0

思路:

  1. 由題獨一無二可知,利用異或運算的性質即可求出這里面沒有的數
  2. 即定義一個變量初始為0,將 0~n 的所有數與該變量異或,然后再與數組中所有數異或,最后的結果便是丟失的數字
class Solution {public int missingNumber(int[] nums) {int result = 0;for (int i = 0; i < nums.length; i++) {result ^= i;result ^= nums[i];}result ^= nums.length;return result;}
}

復雜度分析

  • 時間復雜度:O(n)
  • 空間復雜度:O(1)

官方題解

方法一:排序

class Solution {public int missingNumber(int[] nums) {Arrays.sort(nums);int n = nums.length;for (int i = 0; i < n; i++) {if (nums[i] != i) {return i;}}return n;}
}

復雜度分析

  • 時間復雜度:O(n logn)
  • 空間復雜度:O(1)

方法二:哈希集合

首先遍歷數組 nums ,將數組中的每個元素加入哈希集合,然后依次檢查從 0 到 n 的每個整數是否在哈希集合中,不在哈希集合中的數字即為丟失的數字。由于哈希集合的每次添加元素和查找元素的時間復雜度都是 O(1) ,因此總時間復雜度是 O(n)

class Solution {public int missingNumber(int[] nums) {Set<Integer> set = new HashSet<Integer>();int n = nums.length;for (int i = 0; i < n; i++) {set.add(nums[i]);}int missing = -1;for (int i = 0; i <= n; i++) {if (!set.contains(i)) {missing = i;break;}}return missing;}
}

復雜度分析

  • 時間復雜度:O(n)
  • 空間復雜度:O(n)

方法三:位運算

class Solution {public int missingNumber(int[] nums) {int xor = 0;int n = nums.length;for (int i = 0; i < n; i++) {xor ^= nums[i];}for (int i = 0; i <= n; i++) {xor ^= i;}return xor;}
}

復雜度分析

  • 時間復雜度:O(n)
  • 空間復雜度:O(1)

方法四:數學

將從 0 到 n 的全部整數之和記為 total,根據高斯求和公式 total = (n * (n+1)) / 2

將數組 nums 的元素之和記為 arrSum,則 arrSum 比 total 少了丟失的一個數字,因此丟失的數字即為 total 于 arrSum 之差。

class Solution {public int missingNumber(int[] nums) {int n = nums.length;int total = n * (n + 1) / 2;int arrSum = 0;for (int i = 0; i < n; i++) {arrSum += nums[i];}return total - arrSum;}
}

復雜度分析

  • 時間復雜度:O(n)
  • 空間復雜度:O(1)

作者:力扣官方題解
鏈接:https://leetcode.cn/problems/missing-number/solutions/1085105/diu-shi-de-shu-zi-by-leetcode-solution-naow/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206656.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206656.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206656.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Makefile] include 關鍵字

在 Makefile 中&#xff0c;include 關鍵字的作用是引入其他文件的內容&#xff0c;通常用于將其他 Makefile 文件&#xff08;通常是頭文件&#xff09;的內容包含到當前的 Makefile 中。這樣可以實現模塊化管理和代碼重用。 include使用 使用 include 關鍵字的語法如下&…

網絡攻擊(一)--安全滲透簡介

1. 安全滲透概述 目標 了解滲透測試的基本概念了解滲透測試從業人員的注意事項 1.1. 寫在前面的話 在了解滲透測試之前&#xff0c;我們先看看&#xff0c;信息安全相關的法律是怎么樣的 中華人民共和國網絡安全法 《中華人民共和國網絡安全法》由全國人民代表大會常務委員會…

Spring Cloud切換內嵌Tomcat為寶蘭德Application Server

目錄 替換Tomcat中間件Tomcat是什么Spring Cloud剔除tomcat引入寶蘭德Application Server打包運行授權導入 替換Tomcat中間件 Tomcat是什么 Spring Cloud剔除tomcat <!--集成springmvc框架 --><dependency><groupId>org.springframework.boot</groupId&…

Boost:asio多io_service,多線程run

多io_service,多線程run,相當于多個線程分別處理注冊在不同io_service上的回調,也就是每個線程排某個io_service的異步處理: //mio_mth.cpp #include <boost/asio.hpp> #include <boost/date_time/posix_time/posix_time_types.hpp> #include <iostream>…

MAC PHP版本安裝問題

安裝php 7.4版本不成功 Error: php7.4 has been disabled because it is a versioned formula! 因為php7.4官方已經不再維護&#xff0c;所以Hombrew將該php版本移出了repository&#xff0c;所以安裝不了。 解決辦法 從第三方倉庫中安裝 //將第三方倉庫加入brew brew tap sh…

7.1 C++11指針空值—nullptr

一、NULL和nullptr區別 NULL是宏定義&#xff0c;nullptr是關鍵字。 #ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif #endif nullptr可以隱式轉換為任意指針類型&#xff0c;而NULL需要顯示轉換 void func(char *) {std::cout <<…

Java安全之Commons Collections6分析

CC6分析 import org.apache.commons.collections.*; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; impo…

Flask 動態路由、請求數據接收、視圖函數返回值詳解

一、動態路由 在前面的博客中&#xff0c;我們學習了如何創建基本的 Flask 應用&#xff0c;并定義了一些簡單的路由。但有時候&#xff0c;我們需要更加靈活的路由&#xff0c;能夠根據用戶請求的不同來動態生成響應。Flask 提供了動態路由的功能&#xff0c;使我們能夠輕松處…

上網監控軟件——安全與隱私的平衡

網絡已經成為人們生活和工作中不可或缺的一部分。然而&#xff0c;隨著網絡使用的普及&#xff0c;網絡安全問題也日益突出。上網監控軟件作為網絡安全領域的一個重要組成部分&#xff0c;在保護企業和家庭網絡安全方面發揮著重要作用。 本文將探討上網監控軟件的背景、功能、優…

我的Android播放器封裝經驗

近段時間&#xff0c;電視家不能用了&#xff0c;好吧&#xff0c;自己開發一個APP。其實也不是開發&#xff0c;而是基于現有的播放器核心自己封裝一個&#xff0c;只要能夠非常方便操作觀看電視就好。 當然&#xff0c;前提是要有節目源&#xff0c;這個我早已完成&#xff…

1-2算法基礎-常用庫函數

1.排序 sort(first,last,cmp) first指向要排序范圍的第一個元素&#xff0c;從0起 last指向要排序范圍的最后一個元素的下一個位置 cmp&#xff08;可選&#xff09;&#xff0c;自定義函數&#xff0c;默認從小到大 評測系統 #include <iostream> #include<algorith…

Java一對一聊天

服務端 package 一對一用戶;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…

three.js 入門三:buffergeometry貼圖屬性(position、index和uvs)

環境&#xff1a; three.js 0.159.0 一、基礎知識 geometry&#xff1a;決定物體的幾何形狀、輪廓&#xff1b;material&#xff1a;決定物體呈現的色彩、光影特性、貼圖皮膚&#xff1b;mesh&#xff1a;場景中的物體&#xff0c;由geometry和materia組成&#xff1b;textu…

十五、機器學習進階知識:K-Means聚類算法

文章目錄 1、聚類概述2、K-Means聚類算法原理3、K-Means聚類實現3.1 基于SKlearn實現K-Means聚類3.2 自編寫方式實現K-Means聚類 4、算法不足與解決思路4.1 存在的問題4.2 常見K值確定方法4.3 算法評估優化思路 1、聚類概述 聚類&#xff08;Clustering&#xff09;是指將不同…

淺談WPF之控件拖拽與拖動

使用過office的visio軟件畫圖的小伙伴都知道&#xff0c;畫圖軟件分為兩部分&#xff0c;左側圖形庫&#xff0c;存放各種圖標&#xff0c;右側是一個畫布&#xff0c;將左側圖形庫的圖標控件拖拽到右側畫布&#xff0c;就會生成一個新的控件&#xff0c;并且可以自由拖動。那如…

Python---面向對象其他特性

1、類屬性 Python中&#xff0c;屬性可以分為實例屬性和類屬性。 類屬性就是 類對象中定義的屬性&#xff0c;它被該類的所有實例對象所共有。通常用來記錄 與這類相關 的特征&#xff0c;類屬性 不會用于記錄 具體對象的特征。 在Python中&#xff0c;一切皆對象。類也是一…

1 接口測試介紹

在軟件測試工作中&#xff0c;接口測試是必不可少的。接口測試一般是發生在單元測試之后&#xff0c;系統測試之前。當開發人員輸出API文檔后&#xff0c;測試人員就可以開始編寫接口測試用例了。接口測試可以讓測試人員更早的介入&#xff0c;不需要等待前后端聯調完成才開始測…

銀行卡二要素API的應用案例:從在線購物到金融投資

引言 隨著互聯網技術的不斷發展&#xff0c;人們的金融需求也在不斷增加。隨之而來的是各種新型金融服務的涌現&#xff0c;讓用戶的金融體驗更加便利快捷。其中&#xff0c;銀行卡二要素API的應用&#xff0c;則為用戶的金融體驗和安全性提供了極大的保障。 銀行卡二要素API…

知識蒸餾的蒸餾損失方法代碼總結(包括:基于logits的方法:KLDiv,dist,dkd等,基于中間層提示的方法:)

有兩種知識蒸餾方法&#xff1a;一種利用教師模型的輸出概率&#xff08;基于logits的方法&#xff09;[15,14,11]&#xff0c;另一種利用教師模型的中間表示&#xff08;基于提示的方法&#xff09;[12,13,18,17]。基于logits的方法利用教師的輸出作為輔助信號來訓練一個較小的…

VBA語法結構及編程思想

VBA&#xff08;Visual Basic for Applications&#xff09;是一種編程語言&#xff0c;它被用于Microsoft Office應用程序的自動化&#xff0c;允許用戶編寫宏來執行常規任務。VBA是基于Microsoft的Visual Basic語言&#xff0c;但專為Office應用程序定制。 VBA語法格式 VBA的…