每日一題——缺失的第一個正整數

缺失的第一個正整數

    • 題目描述
      • 進階:
      • 數據范圍:
    • 示例
      • 示例 1
      • 示例 2
      • 示例 3
    • 題解
      • 思路
      • 代碼實現
      • 代碼解釋
      • 復雜度分析
      • 總結

題目描述

給定一個無重復元素的整數數組 nums,請你找出其中沒有出現的最小的正整數。

進階:

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

數據范圍:

  • 數組元素 nums[i] 的值在 ? 2 31 ≤ n u m s [ i ] ≤ 2 31 ? 1 -2^{31} \leq nums[i] \leq 2^{31} - 1 ?231nums[i]231?1 之間。
  • 數組長度 len(nums) 滿足 0 ≤ l e n ( n u m s ) ≤ 5 × 1 0 5 0 \leq len(nums) \leq 5 \times 10^5 0len(nums)5×105

示例

示例 1

輸入:

[1, 0, 2]

輸出:

3

示例 2

輸入:

[-2, 3, 4, 1, 5]

輸出:

2

示例 3

輸入:

[4, 5, 6, 8, 9]

輸出:

1

題解

本題的關鍵點是尋找數組中最小的缺失正整數。由于數組中沒有重復的元素,我們可以利用數組下標和數值之間的關系來進行處理。具體步驟如下:

思路

  1. 無效值處理

    • 數組中值小于等于0或大于數組長度的數值不可能是我們要找的最小正整數,可以將它們替換為一個不會影響結果的數字(例如 numsSize + 1)。
  2. 就地交換

    • 數組中的每個數字應該位于它應處的位置。例如,數字 1 應該位于索引 0,數字 2 應該位于索引 1,以此類推。
    • 我們通過交換將數字放到正確的位置上。
  3. 查找缺失的最小正整數

    • 遍歷數組,找到第一個沒有正確放置的數字,返回它的索引對應的正整數。
    • 如果所有的數字都正確放置了,說明數組中包含了所有從 1numsSize 的正整數,那么最小缺失正整數為 numsSize + 1

代碼實現

#include <stdio.h>
#include <stdlib.h>/*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可** @param nums int整型一維數組 * @param numsLen int nums數組長度* @return int整型*/
int minNumberDisappeared(int* nums, int numsLen) {// 1. 將所有不合法的數值替換為 numsLen + 1for (int i = 0; i < numsLen; i++) {if (nums[i] <= 0 || nums[i] > numsLen) {nums[i] = numsLen + 1;}}// 2. 將每個數值放到它應該在的位置上for (int i = 0; i < numsLen; i++) {int num = abs(nums[i]);  // 獲取當前值的絕對值if (num <= numsLen && nums[num - 1] > 0) {nums[num - 1] = -nums[num - 1]; // 標記 num 已經出現}}// 3. 查找第一個沒有標記的正整數for (int i = 0; i < numsLen; i++) {if (nums[i] > 0) {return i + 1; // 返回缺失的第一個正整數}}// 4. 如果沒有缺失,返回 numsSize + 1return numsLen + 1;
}

代碼解釋

  1. 無效值處理

    if (nums[i] <= 0 || nums[i] > numsLen) {nums[i] = numsLen + 1;
    }
    
    • 將數組中所有小于等于0或大于 numsLen 的數值替換為 numsLen + 1,因為這些數值不可能是我們要找的最小正整數。
  2. 就地交換

    int num = abs(nums[i]);
    if (num <= numsLen && nums[num - 1] > 0) {nums[num - 1] = -nums[num - 1]; // 標記為已出現
    }
    
    • 對于每個數字 num,我們將它放到應該在的位置(即 num-1 的位置)。如果 num 在數組范圍內并且當前位置的數字是正數,就將該位置標記為負數,表示該數值已出現。
  3. 查找缺失的最小正整數

    if (nums[i] > 0) {return i + 1; // 返回缺失的第一個正整數
    }
    
    • 如果遍歷完數組后,遇到第一個正數,說明該索引對應的正整數是缺失的最小正整數。
  4. 返回結果

    • 如果所有 1numsLen 的整數都已經出現,則返回 numsLen + 1

復雜度分析

  • 時間復雜度O(n),其中 n 是數組的長度。我們遍歷數組三次:一次處理無效值,一次進行就地交換,一次查找缺失的最小正整數。
  • 空間復雜度O(1),除了輸入數組外,沒有使用額外的空間,所有操作都在原數組上進行。

總結

難得的一道簡單的題目。。

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

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

相關文章

2025年日祭

本文將同步發表于洛谷&#xff08;暫無法訪問&#xff09;、CSDN 與 Github 個人博客&#xff08;暫未發布&#xff09; 本蒟自2025.2.8開始半停課。 以下是題目格式&#xff1a; [題目OJ 題號] [來源&#xff08;選填&#xff09;] 名稱 …… 題號 - 名稱 題目&#xff1a;……

Docker 部署 MySQL-5.7 單機版

一、鏡像獲取 # docker hub 鏡像 docker pull farerboy/mysql:5.7 # 國內阿里鏡像 docker pull registry.cn-hangzhou.aliyuncs.com/farerboy/mysql:5.7 以上兩個鏡像二選一即可 二、運行容器 docker run -dti --name mysql \n --privileged \n --cgroupns private \n --e…

迅為RK3568開發板篇OpenHarmony實操HDF驅動配置LED-編譯源碼

重新編譯 Openharmony4.1 源碼&#xff0c;如下所示&#xff1a; ./build.sh --product-name rk3568 --ccache 或者單獨編譯部件 ./build.sh --product-name rk3568 --build-target demos --ccache 編譯之后&#xff0c;在源碼 out/rk3568/topeet 目錄下生成編譯產物&#xff0…

跨越邊界,大模型如何助推科技與社會的完美結合?

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入&#xff01; 概述 2024年&#xff0c;大模型技術已成為人工智能領域的焦點。這不僅僅是一項技術進步&#xff0c;更是一次可能深刻影響社會發展方方面面的變革。大模型的交叉能否推動技術與社會的真正融合&#xff1f;2025年…

藍橋杯 Java B 組之函數定義與遞歸入門

一、Java 函數&#xff08;方法&#xff09;基礎 1. 什么是函數&#xff1f; 函數&#xff08;方法&#xff09;是 一段可復用的代碼塊&#xff0c;通過 函數調用 執行&#xff0c;并可返回值。在 Java 里&#xff0c;函數也被叫做方法&#xff0c;它是一段具有特定功能的、可…

數據倉庫和商務智能:洞察數據,驅動決策

在數據管理的眾多領域中&#xff0c;數據倉庫和商務智能&#xff08;BI&#xff09;是將數據轉化為洞察力、支持決策制定的關鍵環節。它們通過整合、存儲和分析數據&#xff0c;幫助組織更好地理解業務運營&#xff0c;預測市場趨勢&#xff0c;從而制定出更明智的戰略。今天&a…

C++---命名空間

目錄 c語言中的問題命名空間的定義注意事項第一點&#xff1a;同名命名空間第二點&#xff1a;命名空間中的全局變量與局部變量 命名空間的使用第一種使用方法第二種使用方法第三種使用方法 注意事項第一點&#xff1a;沒有名字的命名空間第二點&#xff1a;局部優先原則第三點…

Prompt逆向工程:如何“騙“大模型吐露其Prompt?

提示詞的“逆向工程”&#xff0c;讓AI大語言模型幫你反推提示詞 一、前言 在日常生活中&#xff0c;我們不時會遇到一些令人驚艷的文本&#xff0c;不論是一篇精彩絕倫的小說、一篇深入淺出的科普文章&#xff0c;還是一篇充滿熱情的音樂推薦&#xff0c;它們都能在我們的心…

Android studio常量表達式的錯誤

case R.id.openSerial485: 異常 在Android Studio中遇到“錯誤: 需要常量表達式”通常是因為在需要編譯時常量的地方使用了變量。以下是常見場景及解決方法&#xff1a; 1. switch 語句中的 case 標簽 Java要求case標簽必須是常量表達式&#xff08;如字面量或final常量&…

【UI設計】可視化大屏原型設計

文章目錄 一、墨刀中的幾個可視化大屏框架原型 一、墨刀中的幾個可視化大屏框架原型

【推理llm論文精度】DeepSeek-R1:強化學習驅動LLM推理能力飛躍

最近deepseek R1模型大火&#xff0c;正好復習一下他家的技驚四座的論文https://arxiv.org/pdf/2501.12948 近年來&#xff0c;大型語言模型&#xff08;LLM&#xff09;在推理能力上取得了顯著進展&#xff0c;但如何進一步有效提升仍然是研究熱點。DeepSeek-AI發布了 DeepS…

啟明星辰發布MAF大模型應用防火墻產品,提升DeepSeek類企業用戶安全

2月7日&#xff0c;啟明星辰面向DeepSeek等企業級大模型業務服務者提供的安全防護產品——天清MAF&#xff08;Model Application Firewall&#xff09;大模型應用防火墻產品正式發布。 一個新賽道將被開啟…… DeepSeek的低成本引爆賽道規模 隨著DeepSeek成為當前最熱的現象級…

conda將python低版本環境升級到高版本

conda將python低版本環境3.7.16升級到高版本3.8 1. 激活你的Conda環境2. 升級Python版本3. 驗證升級4. 處理依賴問題5. 測試環境注意事項 可以將Conda環境中的Python版本從3.7.16升級到3.8。以下是具體步驟&#xff1a; 1. 激活你的Conda環境 首先&#xff0c;你需要激活你想要…

day10-字符串

目錄 字符串1、API 和 API 幫助文檔2、String概述3、String構造方法代碼實現 和 內存分析3.1 創建String對象的兩種方式3.2 Java的內存模型 4、字符串的比較4.1 號的作用4.2 equals方法的作用 練習5、用戶登錄6、遍歷字符串和統計字符個數7、字符串拼接和翻轉8、較難練習-金額轉…

互聯網協議套件中的服務類型(RFC 1349)技術解析與總結

1. 背景與核心目標 RFC 1349 是對 IP 協議頭部 服務類型&#xff08;Type of Service, TOS&#xff09;字段語義的更新與澄清文檔&#xff0c;發布于 1992 年。其主要目標包括&#xff1a; 重新定義 TOS 字段的用途&#xff1a;明確 TOS 字段的語義&#xff0c;解決歷史標準中的…

使用git commit時‘“node“‘ 不是內部或外部命令,也不是可運行的程序

第一種&#xff1a; 使用git commit -m "xxx"時會報錯&#xff0c;我看網上的方法是在命令行后面添加--no-verify&#xff1a;git commit -m "主題更新" --no-verify&#xff0c;但是不可能每次都添加。 最后解決辦法是&#xff1a;使用git config --lis…

DeepSeek從入門到精通:全面掌握AI大模型的核心能力

文章目錄 一、DeepSeek是什么&#xff1f;性能對齊OpenAI-o1正式版 二、Deepseek可以做什么&#xff1f;能力圖譜文本生成自然語言理解與分析編程與代碼相關常規繪圖 三、如何使用DeepSeek&#xff1f;四、DeepSeek從入門到精通推理模型推理大模型非推理大模型 快思慢想&#x…

洛谷P3397 地毯(二維差分加暴力法)

題目難度&#xff1a;普及一 題目傳送門 地毯 題目描述 在 n n n\times n nn 的格子上有 m m m 個地毯。 給出這些地毯的信息&#xff0c;問每個點被多少個地毯覆蓋。 輸入格式 第一行&#xff0c;兩個正整數 n , m n,m n,m。意義如題所述。 接下來 m m m 行&#…

使用OBS推流,大華攝像頭 srs服務器播放

說明&#xff1a; ffmpeg可以推流&#xff0c;但是是命令行方式不太友好&#xff0c;還可以使用主流的OBS開源推流軟件&#xff0c;可從官網Open Broadcaster Software | OBS 下載最新版本&#xff0c;目前很多網絡主播都是用它做直播。該軟件支持本地視頻文件以及攝像頭推流。…

從大規模惡意攻擊 DeepSeek 事件看 AI 創新隱憂:安全可觀測體系建設刻不容緩

作者&#xff1a;羿莉&#xff08;蕭羿&#xff09; 全球出圈的中國大模型 DeepSeek 作為一款革命性的大型語言模型&#xff0c;以其卓越的自然語言處理能力和創新性成本控制引領行業前沿。該模型不僅在性能上媲美 OpenAI-o1&#xff0c;而且在推理模型的成本優化上實現了突破…