【位運算】丟失的數字(easy)

34. 丟失的數字(easy)

  • 題?描述:
  • 方法一:排序
  • 解法(位運算):
    • C++ 算法代碼:
    • Java 算法代碼:

題?鏈接: 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 中的所有數字都 獨???
進階:你能否實現線性時間復雜度、僅使?額外常數空間的算法解決此問題?

方法一:排序

一個簡單的做法是直接對 nums 進行排序,找到符合 nums[i] =i 的位置即是答案,如果不存在 nums[i]=i 的位置,則 n 為答案。

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(nlogn),其中 n 是數組 nums 的長度。排序的時間復雜度是 O(nlogn),遍歷數組尋找丟失的數字的時間復雜度是 O(n),因此總時間復雜度是 O(nlogn)。
空間復雜度:O(logn),其中 n 是數組 nums 的長度。空間復雜度主要取決于排序的遞歸調用棧空間。

解法(位運算):

算法思路:
異或
找缺失數、找出現一次數都是異或的經典應用。
我們可以先用 ret 對各個 nums[i] 進行異或,然后求得 [1,n] 的異或和 ans。
這樣最終得到的異或和表達式中,只有缺失元素出現次數為 1 次,其余元素均出現兩次(x⊕x=0),即最終答案 ans 為缺失元素。

C++ 算法代碼:

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

Java 算法代碼:

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

復雜度分析
時間復雜度:O(n),其中 n 是數組 nums 的長度。需要對 2n+1 個數字計算按位異或的結果。
空間復雜度:O(1)。

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

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

相關文章

如何通過RL真正提升大模型的推理能力?NVIDIA提出長期強化學習訓練框架ProRL

原文&#xff1a;https://mp.weixin.qq.com/s/QLFKvb8Ol3CX9uWKBXSrow 論文&#xff1a;ProRL: Prolonged Reinforcement Learning Expands Reasoning Boundaries in Large Language Models Abs&#xff1a;https://arxiv.org/abs/2505.24864 權重下載&#xff1a;https://hugg…

ORM 框架的優缺點分析

ORM 框架的優缺點分析 一、ORM 框架概述 ORM(Object-Relational Mapping)是一種將關系型數據庫與面向對象編程進行映射的技術框架。它通過將數據庫表映射為編程語言中的類,將記錄映射為對象,將字段映射為屬性,實現了用面向對象的方式操作數據庫。 核心價值:ORM 在數據庫和…

1. 數據庫基礎

1.1 什么是數據庫 ? mysql 本質是一種網絡服務, 是基于 C(mysql) S(mysqld)的 網絡服務. 存儲數據用文件就可以了&#xff0c;為什么還要弄個數據庫&#xff1f;文件保存數據存在以下缺點&#xff1a; 文件的安全性問題。文件不利于數據查詢和管理。文件不利于存儲海量數據。…

go語言學習 第5章:函數

第5章&#xff1a;函數 函數是編程中不可或缺的一部分&#xff0c;它封裝了一段可重復使用的代碼&#xff0c;用于執行特定的任務。在Go語言中&#xff0c;函數同樣扮演著重要的角色。本章將詳細介紹Go語言中函數的定義、調用、參數傳遞、返回值處理以及一些高級特性&#xff…

MapReduce 分布式計算模型

what&#xff1a;分解大數據集&#xff0c;并行處理&#xff0c;匯總結果&#xff08;分解組合思想&#xff09; 目的&#xff1a;SQL查詢轉換為MR&#xff0c;理解MR更好優化SQL 優點&#xff1a; 只需關注業務邏輯&#xff08;自定義函數map&#xff0c;reduce&#xff09…

RDMA簡介3之四種子協議對比

RDMA協議共有四種子協議&#xff0c;分別為InfiniBand、iWARP、RoCE v1和RoCE v2協議。這四種協議使用統一的RDMA API&#xff0c;但在具體的網絡層級實現上有所不同&#xff0c;如圖1所示&#xff0c;接下來將分別介紹這四種子協議。 圖1 RDMA四種子協議網絡層級關系圖 Infin…

LabelImg: 開源圖像標注工具指南

LabelImg: 開源圖像標注工具指南 1. 簡介 LabelImg 是一個圖形化的圖像標注工具&#xff0c;使用 Python 和 Qt 開發。它是目標檢測任務中最常用的標注工具之一&#xff0c;支持 PASCAL VOC 和 YOLO 格式的標注輸出。該工具開源、免費&#xff0c;并且跨平臺支持 Windows、Lin…

系統架構設計論文

disstertation 軟考高級-系統架構設計師-論文&#xff1a;論文范圍&#xff08;十大知識領域&#xff09;、歷年論題、預測論題及論述過程、論文要點、論文模板等。 —— 2025 年 4 月 4 日 甲辰年三月初七 清明 目錄 disstertation1、論文范圍&#xff08;十大核心領域&#x…

數學復習筆記 26

5.25&#xff1a;這題還是有點難度的。主要是出現了新的知識點&#xff0c;我現在還沒有那么熟悉這個新的知識點。這塊就是&#xff0c;假設一個矩陣可以寫成一個列向量乘以一個行向量的形式&#xff0c;這兩個向量都是非零向量&#xff0c;那么這個矩陣的秩等于一。這個的原理…

[Java 基礎]注釋

注釋在編程中扮演著非常重要的角色&#xff0c;它們是寫給人類閱讀的&#xff0c;而不是給計算機執行的。良好的注釋可以極大地提高代碼的可讀性和可維護性。 為什么需要注釋&#xff1f; 提高可讀性&#xff1a; 注釋可以解釋代碼的功能、實現思路、特殊處理等&#xff0c;幫…

TortoiseSVN賬號切換

SVN登錄配置及賬號切換 本文主要為了解答svn客戶端如何進行賬號登錄及切換不同權限賬號的方式。 一、環境準備與客戶端安裝 安裝TortoiseSVN客戶端 ??下載地址??&#xff1a;TortoiseSVN官網 ??安裝步驟??&#xff1a; 雙擊安裝包&#xff0c;按向導完成安裝后&#x…

5分鐘了解JVM運行時數據區域

點擊藍字&#xff0c;關注我們 在 Java 程序運行期間&#xff0c;JVM 會劃分出幾塊重要的內存區域&#xff0c;用來支撐類加載、方法調用、對象分配、線程執行等一切運行時行為。 這些區域構成了 JVM 的“運行時數據區”。 一、運行時數據區域概覽圖 二、Java 堆&#xff08;H…

深入理解CSS浮動:從基礎原理到實際應用

深入理解CSS浮動&#xff1a;從基礎原理到實際應用 引言 在網頁設計中&#xff0c;CSS浮動&#xff08;float&#xff09;是一個歷史悠久卻又至關重要的概念。雖然現代布局技術如Flexbox和Grid逐漸流行&#xff0c;但浮動仍然在許多場景中發揮著重要作用。本文將帶你深入理解…

Spring Bean 為何“難產”?攻克構造器注入的依賴與歧義

本文已收錄在Github&#xff0c;關注我&#xff0c;緊跟本系列專欄文章&#xff0c;咱們下篇再續&#xff01; &#x1f680; 魔都架構師 | 全網30W技術追隨者&#x1f527; 大廠分布式系統/數據中臺實戰專家&#x1f3c6; 主導交易系統百萬級流量調優 & 車聯網平臺架構&a…

華為云Flexus+DeepSeek征文|實戰體驗云服務器單機部署和CCE高可用的架構AI賦能

前引&#xff1a;“在數字化浪潮洶涌澎湃的今天&#xff0c;企業對云計算服務的需求已從基礎架構支撐&#xff0c;逐步轉向更深層次的AI賦能與業務創新驅動。面對復雜多變的市場環境&#xff0c;選擇一個強大、可靠且具備前瞻性的云服務伙伴&#xff0c;無疑是企業實現高速增長…

雷卯針對易百納G610Q-IPC-38E 模組防雷防靜電方案

一、應用場景 1、智能監控 2、智能家居 3、工業自動化 4、機器人 5、智能交通 6、醫療影像 7、教育科研 二、 功能概述 1 HI3516CV610&#xff08;ARM Cortex-A7 MP2&#xff09; 2 AI算力 1Tops 3 模組集成 4M30FPS Sensor&#xff0c;支持最高 6M30fps 的 ISP 圖像…

生成對抗網絡(GAN)基礎原理深度解析:從直觀理解到形式化表達

摘要 本文詳細解析 生成對抗網絡&#xff08;GAN&#xff09; 的 核心原理&#xff0c;從通俗類比入手&#xff0c;結合印假鈔與警察博弈的案例闡述生成器 與 判別器 的對抗機制&#xff1b;通過模型結構示意圖&#xff0c;解析 噪聲采樣、樣本生成 及判別流程&#xff1b;基于…

OptiStruct結構分析與工程應用:無限元法介紹

13.3 無限元方法 本節將詳細闡述如何利用無限元方法求解外聲場分析&#xff0c;具體包括無限元方法基本理論&#xff0c;無限單元介紹、無限元分析建模指南及檢查&#xff0c;最后以一個實例講解整個分析設置過程。 13.3.1 無限元分析基礎理論 無限元求解外聲場的基本原理如…

判斷:有那種使用了局部變量的遞歸過程在轉換成非遞歸過程時才必須使用棧

這道題的關鍵在于理解遞歸轉非遞歸與 “是否用棧” 的本質邏輯&#xff0c;和 “局部變量” 無關&#xff0c;核心看遞歸的調用上下文是否需要保存。 一、遞歸的本質&#xff1a;依賴 “調用棧” 遞歸函數執行時&#xff0c;系統會用調用棧保存&#xff1a; 每層遞歸的參數、…

leetcode1443. 收集樹上所有蘋果的最少時間-medium

1 題目&#xff1a;收集樹上所有蘋果的最少時間 官方標定難度&#xff1a;中 給你一棵有 n 個節點的無向樹&#xff0c;節點編號為 0 到 n-1 &#xff0c;它們中有一些節點有蘋果。通過樹上的一條邊&#xff0c;需要花費 1 秒鐘。你從 節點 0 出發&#xff0c;請你返回最少需…