【LeetCode 熱題 100】41. 缺失的第一個正數——(解法一)暴力解

Problem: 41. 缺失的第一個正數
題目:給你一個未排序的整數數組 nums ,請你找出其中沒有出現的最小的正整數。
請你實現時間復雜度為 O(n) 并且只使用常數級別額外空間的解決方案。

文章目錄

  • 整體思路
  • 完整代碼
  • 時空復雜度
    • 時間復雜度:O(N log N)
    • 空間復雜度:O(log N)

整體思路

這段代碼旨在解決一個經典的數組問題:缺失的第一個正數 (First Missing Positive)。問題要求在一個未排序的整數數組中,找到沒有出現的最小的正整數。例如,在 [3, 4, -1, 1] 中,最小的缺失正數是 2

該算法采用了一種簡單直觀的 “排序后線性掃描” 的策略。其核心邏輯步驟如下:

  1. 排序

    • 算法的第一步是對整個輸入數組 nums 進行升序排序。
    • 目的:排序是這個解法的關鍵前提。它將所有負數、零和重復的正數都組織起來,更重要的是,它使得我們可以按順序查找 1, 2, 3, ...。一旦排好序,如果這些正整數存在,它們必然會以(可能不連續的)升序出現。
  2. 線性掃描與目標追蹤

    • 算法使用一個變量 ans,初始化為 1。這個 ans 變量可以被看作是“我們正在尋找的目標正整數”。
    • 接著,通過一個 for 循環遍歷排序后的數組。
    • 在循環中,將數組中的當前元素 nums[i] 與我們的目標 ans 進行比較。
      • 如果 nums[i] == ans:這意味著我們找到了當前的目標 1(或 2, 3, …)。因此,我們需要更新我們的目標為下一個正整數,即執行 ans++
      • 如果 nums[i] != ans:這可能是因為 nums[i] 是一個負數、零、或者是一個比 ans 更大的正數,也可能是重復的數字。在任何這些情況下,我們都還沒有找到當前的目標 ans,所以我們保持 ans 不變,繼續向后查找。
  3. 返回結果

    • 當遍歷完整個數組后,ans 的值就是最小的、沒有在數組中找到的那個正整數。例如,如果數組中有 12ans 會被更新到 3。如果在后續的遍歷中沒有找到 3,那么 ans 最終就會停在 3,這正是我們想要的結果。

總而言之,這是一個邏輯簡單、易于理解但時間效率不是最優的解法,因為其性能瓶頸在于排序步驟。

完整代碼

class Solution {/*** 在一個未排序的整數數組中,找到沒有出現的最小的正整數。* @param nums 輸入的整數數組* @return 缺失的最小正整數*/public int firstMissingPositive(int[] nums) {// ans: 我們的“目標”或“候選”的最小缺失正整數,從 1 開始尋找。int ans = 1;// 步驟 1: 對數組進行升序排序。// 這使得我們可以按順序查找 1, 2, 3, ...Arrays.sort(nums);// 步驟 2: 線性掃描排序后的數組for (int i = 0; i < nums.length; i++) {// 如果在數組中找到了我們當前的目標 (ans),// 說明 ans 不是缺失的,我們需要尋找下一個正整數。if (nums[i] == ans) {// 更新目標為下一個正整數ans++;}}// 遍歷結束后,ans 的值就是第一個沒有在數組中匹配到的正整數。return ans;}
}

時空復雜度

時間復雜度:O(N log N)

  1. 排序Arrays.sort(nums) 是算法中時間開銷最大的部分。在Java中,對基本類型數組的排序采用的是雙軸快速排序(Dual-Pivot Quicksort),其平均時間復雜度為 O(N log N)
  2. 線性掃描for 循環遍歷整個數組一次,執行 N 次迭代。循環體內部的操作(比較和可能的自增)都是 O(1) 的。因此,這部分的時間復雜度是 O(N)

綜合分析
算法的總時間復雜度由排序和線性掃描兩部分構成,即 O(N log N) + O(N)。在 Big O 表示法中,我們只保留最高階項,因此最終的時間復雜度由排序決定,為 O(N log N)

空間復雜度:O(log N)

  1. 主要存儲開銷:該算法在原地修改數組(通過排序),并沒有創建與輸入規模 N 成比例的新的數據結構。
  2. 排序的額外空間
    • Java 的 Arrays.sort 實現(雙軸快速排序)是一種原地排序算法,但它需要遞歸。遞歸調用會占用調用棧(call stack)的空間。
    • 對于一個性能良好的快速排序實現,遞歸棧的深度在平均情況下是 O(log N),在最壞情況下可能達到 O(N)。
  3. 其他變量ansi 等變量只占用常數級別的空間,即 O(1)。

綜合分析
算法所需的額外輔助空間主要由排序算法的遞歸調用棧決定。因此,在平均情況下,其空間復雜度為 O(log N)。如果忽略排序算法內部的棧空間,可以認為是 O(1),但 O(log N) 是一個更精確的分析。

LeetCode 熱題 100】41. 缺失的第一個正數——(解法二)原地哈希

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

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

相關文章

在運行 Laravel Sail 前,需安裝 Docker Desktop 并完成基礎配置/具體步驟

一、安裝 Docker Desktop&#xff08;必備環境&#xff09; Windows 系統 &#xff08;windows安裝包 有兩個版本&#xff09; 架構版本查看 1. Win R? 輸入 ?cmd? 打開命令提示符&#xff1b; 2. ?輸入命令?&#xff1a; bash echo %PROCESSOR_ARCHITECTURE% 3. ?結果…

AI 應用于進攻性安全

一、引言 大語言模型&#xff08;LLM&#xff09;和 AI 智能體的出現推動進攻性安全變革&#xff0c;其在偵察、掃描、漏洞分析、利用、報告五個階段展現出數據分析、代碼生成、攻擊場景規劃等能力&#xff0c;能提升安全團隊效率與擴展性&#xff0c;但存在 “幻覺” 等局限性…

微控制器中的EXTI0(External Interrupt 0)中斷是什么?

微控制器中的EXTI0(External Interrupt 0)中斷是什么? EXTI0(External Interrupt 0) 是微控制器(如STM32等ARM Cortex-M系列芯片)中的一個外部中斷線,專門用于處理來自特定GPIO引腳的外部信號觸發中斷。以下是詳細說明: 1. 基本概念 EXTI(External Interrupt/Event …

EasyGBS平臺內置AI算法了,算法成為了視頻平臺的標配

今年五一的時候立了個flag&#xff08;《國標GB28181平臺EasyGBS未來研發方向在哪&#xff1f;》&#xff09;&#xff0c;我想不能再局限在只是滿足于傳統視頻平臺的功能&#xff0c;傳統的EasyGBS也就是接入幾種視頻協議&#xff0c;什么RTSP、ONVIF、RTMP、GB28181這些&…

C# 常量與變量

在 C# 中&#xff0c;常量和變量是存儲數據的基本方式&#xff1a; // 常量&#xff1a;使用 const 關鍵字聲明&#xff0c;必須在聲明時初始化&#xff0c;且值不能改變 const double Pi 3.14159; const string Message "Hello, World!"; ? // 變量&#xff1a;…

TensorRT-LLM:大模型推理加速的核心技術與實踐優勢

大型語言模型推理就像讓一頭300公斤的大熊貓玩平衡木——顯存消耗和計算效率這對雙胞胎問題隨時可能讓表演翻車。以主流的7B參數模型為例&#xff0c;FP16精度下僅模型權重就吃掉14GB顯存&#xff0c;這還沒算上推理過程中不斷膨脹的KV Cache——當處理2048長度的對話時&#x…

免費棱光 PDF:免安裝 加水印 去水印 批量格式轉換

各位辦公小能手們&#xff0c;今天給大家介紹一款超棒的PDF處理工具——棱光PDF&#xff01;它完全免費&#xff0c;專門解決咱對PDF文件的常見操作需求。綠色免安裝&#xff0c;體積小得跟顆花生米似的&#xff0c;打開就能用。它有三大核心功能&#xff0c;分別是水印管理、格…

(二)復習(Error Pattern/Result Pattern/)

文章目錄 項目地址一、Error Pattern1.1 定義Error類1. ErrorType 可發生的錯誤類型2. Error類3. ValidataionError1.2 給每個實體創建Error類1. CategoryError類2. TicketErrror類3. EventErrror類二、Result Pattern1.1 自定義返回Result1. 泛型類2. 泛型方法1.2 Api層的Resu…

20250705-day6

NATO&#xff1a;北大西洋公約組織 Software Crisis&#xff1a;軟件危機 Paradigm&#xff1a;設計范型 Waterfall Model&#xff1a;瀑布模型 Prototype Model&#xff1a;原型模型&#xff08;又稱快速模型&#xff09; Spiral Model&#xff1a;螺旋模型 Agile&#xff1a;…

視頻播放中時鐘的概念及音視頻同步概念

author: hjjdebug date: 2025年 07月 05日 星期六 18:20:45 CST descrip: 視頻播放中時鐘的概念及音視頻同步概念 文章目錄 1.前言: 視頻播放:1. 固定延時時間2. 根據frame的duration來延時.3. 根據frame的PTS 來播放3.1. 時鐘是什么?3.2. 時鐘的用途. 2.音視頻同步: 1.前言: …

Python基礎之字符串操作全解析

在 Python 中&#xff0c;字符串是最常用的數據類型之一&#xff0c;掌握字符串的各種操作對于日常編程至關重要。本文將詳細介紹 Python 字符串的類型特性、編碼轉換、常用運算符及方法&#xff0c;幫助你全面掌握字符串處理技巧。 一、字符串的基本類型 Python 中的字符串屬…

【爬蟲】逆向爬蟲初體驗之爬取音樂

尋找數據 打開F12中的網絡頁面&#xff0c;播放音樂后&#xff0c;篩選媒體&#xff0c;會發現當前這首歌曲音頻鏈接地址&#xff0c;打開后&#xff0c;點擊“標頭”就能能看到請求URL 截取“.mp3”前面的一部分進行搜索&#xff0c;搜索出來了很多數據包&#xff0c;但都是…

CppCon 2018 學習:Fancy Pointers for Fun and Profit

“Fancy Pointers for Fun and Profit” 這個標題聽起來像是在討論**“高級指針用法”**&#xff0c;尤其是在C里&#xff0c;如何利用智能指針、定制指針類型&#xff0c;或者其他高級指針技巧來寫更安全、更高效、更優雅的代碼。 可能的理解和內容方向&#xff1a; 1. 什么是…

思辨場域丨數字信號技術重塑農林牧漁:從“靠天吃飯”到“靠數吃飯”

凌晨三點&#xff0c;山東萊蕪的養豬戶老李被手機震動驚醒。屏幕顯示&#xff1a;3號豬舍&#xff0c;母豬即將分娩。他輕點屏幕啟動遠程監控&#xff0c;翻身繼續入睡——而在幾年前&#xff0c;這樣的夜晚他只能在豬圈里守著。 清晨的茶園里&#xff0c;興業縣的茶農王大姐掏…

文心大模型及百度大模型內容安全平臺齊獲信通院大模型安全認證

近日&#xff0c;文心大模型與百度大模型內容安全平臺——紅線大模型雙雙榮獲中國信息通信研究院泰爾認證中心頒發的“大規模預訓練模型&#xff08;文本生成功能&#xff09;安全認證證書”&#xff0c;且二者的認證級別皆“增強級”的最高級別。 大規模預訓練模型&#xff08…

香港服務器查詢緩存禁用-性能優化關鍵技術解析

在香港服務器運維過程中&#xff0c;查詢緩存禁用是提升數據庫性能的關鍵操作。本文將深入解析禁用查詢緩存的原理、操作步驟、適用場景及注意事項&#xff0c;幫助管理員優化MySQL服務器配置&#xff0c;解決高并發環境下的性能瓶頸問題。香港服務器查詢緩存禁用-性能優化關鍵…

深度學習圖像分類數據集—七種動物識別分類

該數據集為圖像分類數據集&#xff0c;適用于ResNet、VGG等卷積神經網絡&#xff0c;SENet、CBAM等注意力機制相關算法&#xff0c;Vision Transformer等Transformer相關算法。 數據集信息介紹&#xff1a;七種動物識別分類&#xff1a;[Chinese_Merganser, panda, Sika_Deer, …

ubuntu22桌面版中文輸入法 fcitx5

不要去 ubuntu software 下載 fcitx5 快捷鍵用不了 直接 sudo apt install fcitx5 \ fcitx5-chinese-addons \ fcitx5-frontend-gtk4 fcitx5-frontend-gtk3 fcitx5-frontend-gtk2 \ fcitx5-frontend-qt5不要在fcitx5里面設置快捷鍵&#xff0c;有些應用可能無法生效 在設置里全…

推客系統小程序終極指南:從0到1構建自動裂變增長引擎,實現業績10倍增長!

&#x1f4cc; 前言&#xff1a;為什么傳統營銷越來越難做&#xff1f;在流量紅利消失的今天&#xff0c;企業普遍面臨三大增長困境&#xff1a;獲客成本飆升&#xff1a;電商、教育等行業單客成本突破500元&#xff0c;ROI持續走低用戶粘性差&#xff1a;90%的活動用戶只參與一…

【數據結構】排序算法:歸并與堆

歸并排序&#xff1a;分治策略的經典實現 算法原理 歸并排序采用分治法策略&#xff0c;包含三個關鍵步驟&#xff1a; 分解&#xff1a;遞歸地將數組分成兩半 解決&#xff1a;對子數組進行排序 合并&#xff1a;將兩個有序子數組合并為一個有序數組 C語言實現 #includ…