leetcode題目 41 缺失的第乙個正數

2021-10-02 07:12:08 字數 1357 閱讀 7271

給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。

示例 1:

輸入: [1,2,0]

輸出: 3

示例 2:

輸入: [3,4,-1,1]

輸出: 2

示例 3:

輸入: [7,8,9,11,12]

輸出: 1

一共n個數,我們要找出未出現過的最小正整數。當這一堆數是1到n時,取得result的最大值n+1,如果有重複數字,那麼這個n個數佔不滿1到n,比n大的數我們可以不管。

所以我們開乙個n+2的陣列,index=0的位置我們不使用,index=1到n+1我們儲存結果,首先這些陣列初值都置為0,遍歷陣列,出現過的數,我們就將相應的索引的陣列值置為1.最後遍歷陣列,找出第乙個為0的陣列元素,返回索引值。

public

class

problem41

}for

(int i=

1;i)return0;

}public

static

void

main

(string[

] args)

; system.out.

println

(pro.

firstmissingpositive

(test));

}}

我們採用三次1-n迴圈,第一次我們判斷是否出現過1以及將不在1-n範圍的值都置為1,如果1從頭到尾都沒出現過,直接返回就行。第二次迴圈我們依此檢查所有元素,以此元素值作為索引,將對應值變為負數,表示此索引代表的值在陣列**現過(如索引2的值為-5,那麼表示2在陣列**現過,實際寫**時表示的是2+1,因為有邊界問題)。最後一次迴圈,找出有木有為正的數,有則直接返回索引值,無則返回n+1;

public

class

problem41_2

//未出現過1,直接返回if(

!flag)

return1;

//遍歷記錄元素,類似bitmap的思想,正數表示此索引代表值未出現,負數代表出現

for(

int i=

0;i)//再次遍歷,判斷是否還有正數

for(

int i=

0;i)return size+1;

}public

static

void

main

(string[

] args)

; system.out.

println

(pro.

firstmissingpositive

(test));

}}

LeetCode演算法41 java缺失的第乙個正數

問題 給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。示例 1 輸入 1,2,0 輸出 3 示例 2 輸入 3,4,1,1 輸出 2 示例 3 輸入 7,8,9,11,12 輸出 1 說明 你的演算法的時間複雜度應為o n 並且只能使用常數級別的空間。思考 有的小夥伴上來說這個題太簡單了,...

力扣 題目41 缺失的第乙個正數

1.首先題目中提到我們只需要輸出 最小的正整數即可 那麼只看正數 0和負數都不看了 2.超過vector長度的數字也不用看 因為最好的結果 也就是1,2,3,4 5是解 也就是說最小的正整數的解 最大也就是vector的長度 1 而超過vector長度的自然也不用管 知道上面兩個前提之後再來看下面兩...

leetcode 41 缺失的第乙個正數

給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。示例 1 輸入 1,2,0 輸出 3 示例 2 輸入 3,4,1,1 輸出 2 示例 3 輸入 7,8,9,11,12 輸出 1 說明 你的演算法的時間複雜度應為o n 並且只能使用常數級別的空間。題目規定了時間複雜度為o n 空間複雜度為常...