力扣-hot100 (缺失的第一個正數)

41. 缺失的第一個正數

困難

給你一個未排序的整數數組 nums ,請你找出其中沒有出現的最小的正整數。

請你實現時間復雜度為 O(n) 并且只使用常數級別額外空間的解決方案。

示例 1:

輸入:nums = [1,2,0] 輸出:3

解釋:范圍 [1,2] 中的數字都在數組中。


示例 2:

輸入:nums = [3,4,-1,1] 輸出:2

解釋:1 在數組中,但 2 沒有。
?

示例 3:

輸入:nums = [7,8,9,11,12] 輸出:1

解釋:最小的正數 1 沒有出現。

提示:

1 <= nums.length <= 105

-231 <= nums[i] <= 231 - 1

思路:直接使用Hash表來記錄下每個數, 預處理后再去檢查1 ~ n + 1 缺失的數.【時間復雜度O(n) 空間復雜度O(n)】 而題目要求空間復雜度O(1)

解決關鍵: 數組本身是有兩個位置可以記錄數據的數據結構,一個是索引下標,另一個就是值. 利用這一點來實現常數級別空間復雜度的解決

這里將每個遍歷到的值都將數組的索引做一個標記 (為了不影響這個數本身的價值,將其標為負數, 用到該數時再取絕對值, 但如果這里原來數組的數本來就是負數呢? 這里是要找缺失的第一個正數,負數是沒有價值的, 所以我們可以將初始就為負數的數替換為一個特定的數. 為了不影響結果, 這個特定的數是要保證是存在的, 所以我們可以將其替換為 1 ~ n+1 的任何數, 只要在預處理的時候檢查他存在, 但題目要求的是需要第一個正數, 故如果選擇后面的數會出現漏掉前面較小的數的檢查. 所以最小數1是你的不二選擇)。 用索引下標表示這個數已經存在, 處理完后只需要找到這個數組的第一個正數, 他的下標就是第一個沒有出現的正數。而缺失的數肯定在1 ~ n+1 之間的。如果都為負數則缺失的就是 n+1

class Solution {public int firstMissingPositive(int[] nums) {int n = nums.length;// 檢查負數的最小標記是否存在 1boolean std = false;for(int i = 0; i < n; i ++) if(nums[i] == 1) std = true;// 不存在直接返回第一個缺失的正數 1if(!std) return 1;// 預處理,為了不讓初始值為負數的數干擾后序檢查的結果. 將無意義的負數都標記為已經存在的 1for(int i = 0; i < n; i ++) if(nums[i] <= 0) nums[i] = 1;// 將存在的數全都標負, 數組下標是從0開始的, 所以處理時都進行 -1for(int i = 0; i < n; i ++){int t = Math.abs(nums[i]);// 缺失的數只在1 ~ n+1 之間, 超過范圍的其它數不需要處理if(t <= n) nums[t - 1] = -Math.abs(nums[t - 1]);}// 找到第一個正數for(int i = 0; i < n; i ++){// 找到時進行 + 1 恢復if(nums[i] > 0) return i + 1;}return n + 1;}
}

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

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

相關文章

13前端項目----購物車修改

購物車修改 uuid臨時游客身份購物車部分功能全選修改商品數量修改商品勾選狀態刪除產品 uuid臨時游客身份 請求數據倉庫發起請求 ->問題&#xff1a;獲取不到購物車數據&#xff1f; 所以需要一個身份&#xff0c;告訴服務器是誰存的數據&#xff1f;是要獲取誰的數據&…

Mac電腦,idea突然文件都展示成了文本格式,導致ts,tsx文件都不能正常加載或提示異常,解決方案詳細說明如下

有一天使用clean my mac軟件清理電腦 突然發現idea出現了文件都以文本格式展示&#xff0c;如圖所示 然后就卸載&#xff0c;計劃重新安裝&#xff0c;安裝了好幾個版本&#xff0c;并且setting->file types怎么設置都展示不對&#xff0c;考慮是否idea沒卸載干凈&#xff…

Nginx搭建test服務器

創建test域名 進入阿里云添加解析 創建域名:test.xxxxx.com 服務器復制項目代碼 新建目錄,Git拉取項目代碼,安裝上插件包 修改配置文件,啟動測試服務 修改配置文件“服務器接口” 開啟服務pm2 start app.js --name "test" 表格含義: 列名含義說明id進程在…

MyBatis-Plus 非 Spring 環境使用時 `GenericTypeResolver` 缺失問題總結

MyBatis-Plus 非 Spring 環境使用時 GenericTypeResolver 缺失問題總結 問題描述 在非 Spring 環境中使用 MyBatis-Plus 3.4.3.1 及以上版本時&#xff0c;啟動程序會拋出以下錯誤&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: org/s…

綜合案例:使用vuex對購物車的商品數量和價格等公共數據進行狀態管理

文章目錄 0.實現需求1.新建購物車模塊cart2.使用json-server模擬向后端請求數據3.在vuex請求獲取并存入數據,并映射到組件中,在組件中渲染【重點】3.1.安裝axios3.2.準備actions和mutations,獲取和存入數據到vuex中3.3.動態渲染:先用mapState映射list到組件頁面 4.點擊修改數量…

《數據結構初階》【順序表 + 單鏈表 + 雙向鏈表】

《數據結構初階》【順序表 單鏈表 順序表】 前言&#xff1a;先聊些其他的東西&#xff01;&#xff01;&#xff01;什么是線性表&#xff1f;什么是順序表&#xff1f;順序表的種類有哪些&#xff1f; 什么是鏈表&#xff1f;鏈表的種類有哪些&#xff1f; ---------------…

Android Retrofit框架分析(三):自動切換回主線程;bulid的過程;create方法+ServiceMethod源碼了解

目錄 Okhttp有什么不好&#xff1f;bulid的過程create方法ServiceMethodcall enqueue的過程為什么要學習源碼呢&#xff1f; 一、Okhttp有什么不好&#xff1f; Okhttp本身來說&#xff0c;是一個挺好的網絡框架&#xff0c;但&#xff0c;對于開發者而言&#xff0c;使用起…

C++ STL 基礎與多線程安全性說明文檔

C STL 基礎與多線程安全性說明文檔 一、STL 簡介 STL&#xff08;Standard Template Library&#xff0c;標準模板庫&#xff09;是 C 標準庫的重要組成部分&#xff0c;提供了常用的數據結構和算法的泛型實現&#xff0c;極大地提高了代碼的復用性和開發效率。 STL 的六大組…

數據結構之圖的分類和存儲

圖 圖(Graph)G由兩個集合V和E組成&#xff0c;記為&#xff1a;G(V,E)&#xff0c;其中V是頂點的有窮非空集合(其實就是頂點)&#xff0c;E是V 中頂點偶對的有窮集合(就是邊)。V(G)和E(G)通常分別表示圖G的頂點集合以及邊集合&#xff0c;E(G)可以為空集合&#xff0c;但是此時…

擴增子分析|微生物生態網絡穩定性評估之魯棒性(Robustness)和易損性(Vulnerability)在R中實現

一、引言 周集中老師團隊于2021年在Nature climate change發表的文章&#xff0c;闡述了網絡穩定性評估的原理算法&#xff0c;并提供了完整的代碼。自此對微生物生態網絡的評估具有更全面的指標&#xff0c;自此網絡穩定性的評估廣受大家歡迎。本系列將介紹網絡穩定性之魯棒性…

setup 函數在 Vue 3 中的作用是什么?什么時候會執行

文章目錄 前言? 一、setup() 函數的作用是什么&#xff1f;? 二、setup() 什么時候執行&#xff1f;? 三、setup() 的參數? 四、setup() 中不能做什么&#xff1f;? 五、常見用法示例? 六、總結&#xff08;適合背誦或面試回答&#xff09; <script setup> 是 **Vu…

JDBC實現--保姆級教程~

本來以為寫過一個使用python與數據庫連接的文章&#xff0c;但是今天突然發現沒有&#xff0c;那就直接寫Java與數據庫連接的吧。當然如果大家有需要可以告訴我&#xff0c;有時間的話也可以寫一個的pymysql的使用的。 數據庫有很多種&#xff0c;接下來我就以MySQL為例來進行講…

Ubuntu18.04搭建samda服務器

一.什么是Samba服務器&#xff1f; Samba服務器是一種基于開源協議實現的網絡共享服務軟件&#xff0c;主要用于在不同操作系統&#xff08;如Windows、Linux、Unix&#xff09;之間實現文件和打印機共享功能。其核心目標是解決跨平臺資源共享的兼容性問題&#xff0c;尤其是在…

《分詞算法大揭秘:BPE、BBPE、WordPiece、ULM常見方法介紹》

分詞算法是自然語言處理&#xff08;NLP&#xff09;中的一個重要預處理步驟&#xff0c;它將文本分割成更小的單元&#xff08;如單詞、子詞或字符&#xff09;。以下是幾種常見的分詞算法&#xff1a;Byte Pair Encoding (BPE)、Byte-level BPE (BBPE)、WordPiece 和 Unigram…

WordPress01 - 后臺常用功能

最近些日子研究Wordpress&#xff0c;做些簡單的筆記。 怎么安裝Wordpress&#xff0c;怎么進的后臺&#xff0c;這些咱就不嘮了哈&#xff0c;網上到處是教程。 目錄 1&#xff0c;Wordpress的后臺 1-1&#xff0c; Posts(投稿) 1-2&#xff0c;Media(媒體) 1-3&#xf…

R8周:RNN實現阿爾茨海默病診斷

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 一、前期準備 1.設置GPU import numpy as np import pandas as pd import torch from torch import nn import torch.nn as nn import torch.nn.functi…

今天python練習題

目錄 一、每日一言 二、練習題 三、效果展示 四、下次題目 五、總結 一、每日一言 不要害怕失敗&#xff0c;失敗可能成為我們前進的動力&#xff01; 二、練習題 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9組成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…

機器人強化學習入門學習筆記(二)

基于上一篇的《機器人強化學習入門學習筆記》,在基于 MuJoCo 的仿真強化學習訓練中,除了 PPO(Proximal Policy Optimization)之外,還有多個主流強化學習算法可用于訓練機器人直行或其他復雜動作。 ?? 一、常見強化學習算法對比(可用于 MuJoCo) 算法類型特點適合場景PP…

用 DuckDB 高效分析 JSON 數據:從入門到實戰

解析 JSON 文件進行分析常常充滿挑戰。無論你是在處理 API 響應、日志文件&#xff0c;還是應用數據&#xff0c;如果沒有合適的工具&#xff0c;分析 JSON 都會非常耗時。 借助 DuckDB&#xff0c;你可以直接用 SQL 查詢復雜的 JSON 文件&#xff0c;無需編寫復雜的解析代碼或…

從貼牌到品牌:出海官網如何讓中國制造“貴”起來?

在全球經濟一體化的當下&#xff0c;中美關稅戰如同一記重錘&#xff0c;給國際貿易格局帶來了巨大震蕩。自貿易摩擦爆發以來&#xff0c;雙方多次調整關稅政策&#xff0c;涉及的商品種類不斷增多&#xff0c;稅率持續攀升&#xff0c;眾多中國企業的出口業務遭受重創&#xf…