国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

力扣數(shù)組類題目--41缺失的第一個(gè)正數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了力扣數(shù)組類題目--41缺失的第一個(gè)正數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

41 缺失的第一個(gè)正數(shù)
給你一個(gè)未排序的整數(shù)數(shù)組 nums ,請(qǐng)你找出其中沒有出現(xiàn)的最小的正整數(shù)。
請(qǐng)你實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(n) 并且只使用常數(shù)級(jí)別額外空間的解決方案。
示例 1:
輸入:nums = [1,2,0]
輸出:3
示例 2:
輸入:nums = [3,4,-1,1]
輸出:2
示例 3:
輸入:nums = [7,8,9,11,12]
輸出:1
方法一:暴力解題,復(fù)雜度超出范圍

from typing import List
def firstMissingPositive(nums: List[int]) -> int:
    for i in nums:
        if i<0:
            nums.remove(i)
    nums.sort()
    b = []
    for i in range(0,max(nums)+2):
        if i not in nums:
            b.append(i)
    b.sort()
    if b[0]==0:
        b.remove(b[0])
    if b==[]:
        return max(nums)+1
    else:
        return min(b)

nums=[3,4,-1,1,9,-5]
a=firstMissingPositive(nums)
print(a)
#以上方法判定為超出內(nèi)存限制!?。?!

方法二:
沒有排序或者暴力循環(huán)
總體思路:
1對(duì)于一個(gè)長度為 N 的數(shù)組,其中沒有出現(xiàn)的最小正整數(shù)只能在 [1,N+1]中。這是因?yàn)槿绻?[1,N] 都出現(xiàn)了,那么答案是 N+1,否則答案是 [1,N] 中沒有出現(xiàn)的最小正整數(shù)
2我們對(duì)數(shù)組進(jìn)行遍歷,對(duì)于遍歷到的數(shù) x,如果它在 [1,N]的范圍內(nèi),那么就將數(shù)組中的第 x?1個(gè)位置(注意:數(shù)組下標(biāo)從 0開始)打上「標(biāo)記」。在遍歷結(jié)束之后,如果所有的位置都被打上了標(biāo)記,那么答案是 N+1,否則答案是最小的沒有打上標(biāo)記的位置加 1
3由于我們只在意 [1,N] 中的數(shù),因此我們可以先對(duì)數(shù)組進(jìn)行遍歷,把不在 [1,N] 范圍內(nèi)的數(shù)修改成任意一個(gè)大于 N 的數(shù)(例如 N+1)。這樣一來,數(shù)組中的所有數(shù)就都是正數(shù)了,因此我們就可以將「標(biāo)記」表示為「負(fù)號(hào)」
力扣數(shù)組類題目--41缺失的第一個(gè)正數(shù),python,leetcode,算法,數(shù)據(jù)結(jié)構(gòu)

from typing import List
def firstMissingPositive(nums: List[int]) -> int:
    n = len(nums)
    for i in range(n):
        if nums[i] <= 0:
            nums[i] = n + 1
    print(nums)
    #凡是0和負(fù)數(shù)都變?yōu)閚+1#[3, 4, 7, 1, 9, 7],因?yàn)檫@里面7和9數(shù)字大于n=6,
    #后面都會(huì)忽略處理它們,因?yàn)槿笔У牡?個(gè)正整數(shù)不可能是它們.
    #除非[1,n]都出現(xiàn)了,那么缺失的第1個(gè)正整數(shù)會(huì)是n+1見下面的return
    for i in range(n):
        num = abs(nums[i])
        #依次處理nums中的值,注意由于下面的處理nums中的值一直在變化
        # #但是nums中各個(gè)值的絕對(duì)值是不變的
        print("num:",num)
        #核心思路:不管nums如何變化這里num依次取到的值依然是3, 4, 7, 1, 9, 7
        # num為3時(shí)把第2個(gè)位置的數(shù)字改為第2個(gè)位置中的數(shù)字的負(fù)數(shù)即把7變?yōu)?7
        #即后面處理的依然可以取到7這個(gè)數(shù)字,
        #又在[1,n]中3處在第3個(gè)位置,也就是python列表的第2個(gè)位置,這里把第2個(gè)位置7標(biāo)為負(fù)數(shù)
        #意味著第2個(gè)位置標(biāo)記為負(fù)數(shù)了,則第2個(gè)位置上數(shù)即2+1=3,即3不可能是缺失的第1個(gè)正整數(shù)
        if num <= n:
            nums[num - 1] = -abs(nums[num - 1])
            print("nums:",nums)#
    for i in range(n):
        if nums[i] > 0:
            return i + 1
    return n + 1

nums=[3,4,-1,1,9,-5]
a=firstMissingPositive(nums)
print(a)#a的范圍肯定在[1,n+1]之間

方法三、文章來源地址http://www.zghlxwxcb.cn/news/detail-673136.html

到了這里,關(guān)于力扣數(shù)組類題目--41缺失的第一個(gè)正數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • LeetCode41.缺失的第一個(gè)正數(shù)

    給你一個(gè)未排序的整數(shù)數(shù)組 nums ,請(qǐng)你找出其中沒有出現(xiàn)的最小的正整數(shù)。 請(qǐng)你實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(n) 并且只使用常數(shù)級(jí)別額外空間的解決方案。 ? 示例 1: 輸入:nums = [1,2,0] 輸出:3 示例 2: 輸入:nums = [3,4,-1,1] 輸出:2 示例 3: 輸入:nums = [7,8,9,11,12] 輸出:1 思路: 1.本

    2024年02月12日
    瀏覽(13)
  • LeetCode 41 缺失的第一個(gè)正數(shù)

    LeetCode 41 缺失的第一個(gè)正數(shù)

    缺失的第一個(gè)正數(shù) 給你一個(gè)未排序的整數(shù)數(shù)組 nums ,請(qǐng)你找出其中沒有出現(xiàn)的最小的正整數(shù)。 請(qǐng)你實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(n) 并且只使用常數(shù)級(jí)別額外空間的解決方案。 示例 1: 示例 2: 示例 3: 提示: 1 = nums.length = 5 * 105 -231 = nums[i] = 231 - 1 如果本題沒有額外的時(shí)空復(fù)雜度要求

    2024年01月17日
    瀏覽(14)
  • LeetCode_原地哈希_困難_41.缺失的第一個(gè)正數(shù)

    給你一個(gè)未排序的整數(shù)數(shù)組 nums ,請(qǐng)你找出其中沒有出現(xiàn)的最小的正整數(shù)。 請(qǐng)你實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(n) 并且只使用常數(shù)級(jí)別額外空間的解決方案。 示例 1: 輸入:nums = [1,2,0] 輸出:3 示例 2: 輸入:nums = [3,4,-1,1] 輸出:2 示例 3: 輸入:nums = [7,8,9,11,12] 輸出:1 提示: 1 = nu

    2024年02月03日
    瀏覽(17)
  • 算法---缺失的第一個(gè)正數(shù)

    算法---缺失的第一個(gè)正數(shù)

    給你一個(gè)未排序的整數(shù)數(shù)組 nums ,請(qǐng)你找出其中沒有出現(xiàn)的最小的正整數(shù)。 借用map 就可以實(shí)現(xiàn),但是如果不借用map,在原空間上,也可以實(shí)現(xiàn),不過想要使用原來的數(shù)據(jù),會(huì)有侵略性,會(huì)把原來的數(shù)據(jù)修改掉。 方法一: 方法二: 算法是很看一個(gè)人的思維邏輯的,所以很多

    2024年02月06日
    瀏覽(17)
  • 【leetcode】缺失的第一個(gè)正數(shù) hashmap

    【leetcode】缺失的第一個(gè)正數(shù) hashmap

    先把數(shù)組里面的正數(shù)i都取出來,放到對(duì)應(yīng)的arr[i]=1 然后遍歷arr,如果不為1,那么就返回i

    2024年01月19日
    瀏覽(11)
  • 84.在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置(力扣)

    84.在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置(力扣)

    目錄 問題描述 代碼解決以及思想? 知識(shí)點(diǎn)? 初始化左邊界 left 為數(shù)組的起始位置(0),右邊界 right 為數(shù)組的結(jié)束位置( nums.size() - 1 )。 進(jìn)入一個(gè)循環(huán),只要左邊界 left 不大于右邊界 right ,就執(zhí)行以下操作: a. 計(jì)算中間位置 middle ,這是為了進(jìn)行二分查找,以避免整數(shù)溢

    2024年02月06日
    瀏覽(28)
  • 在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置——力扣34
  • 力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼

    力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼

    349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼,每題做詳細(xì)思路梳理,配套PythonJava雙語代碼, 2024.04.02?可通過leetcode所有測試用例。 目錄 349. 兩個(gè)數(shù)組的交集 解題思路 完整代碼 Python Java 387. 字符串中的第一個(gè)唯一字符 解題思路 完整代碼 Python Java

    2024年04月08日
    瀏覽(31)
  • 力扣--數(shù)組類題目27. 移除元素

    給你一個(gè)數(shù)組 nums 和一個(gè)值 val,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長度。 示例 1: 輸入:nums = [3,2,2,3], val = 3 輸出:2, nums = [2,2] 解釋:函數(shù)應(yīng)該返回新的長度 2, 并且 nums 中的前兩個(gè)元素均為 2。你不需要考慮數(shù)組中超出新長度后面的元素。例

    2024年02月11日
    瀏覽(12)
  • 打卡一個(gè)力扣題目

    目錄 一、問題 二、解題辦法一 三、解題方法二 四、對(duì)比分析 關(guān)于 ARTS 的釋義 —— 每周完成一個(gè) ARTS: ● Algorithm: 每周至少做一個(gè) LeetCode 的算法題 ● Review: 閱讀并點(diǎn)評(píng)至少一篇英文技術(shù)文章 ● Tips: 學(xué)習(xí)至少一個(gè)技術(shù)技巧 ● Share: 分享一篇有觀點(diǎn)和思考的技術(shù)文章 希望通

    2024年02月15日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包