給你乙個未排序的整數陣列,請你找出其中沒有出現的最小的正整數。
示例 1:
輸入: [1,2,0]
輸出: 3
示例 2:
輸入: [3,4,-1,1]
輸出: 2
示例 3:
輸入: [7,8,9,11,12]
輸出: 1
第一種思路:
1、先進行陣列的排序;排序函式qsort,要避免差值超過返回值範圍的情況;
2、然後找到數字1,j 進行累加判斷,直到陣列和 j 變數不等,跳出迴圈;
第二種思路:
1、通過調換,將陣列中的在value [1,numssize]範圍內的數字移動到nums[value-1]位子上;
2、從頭遍歷陣列,若(下標+1)和值不對應則返回(下標+1);
第三個思路:
通過正負標記,標記對應位置上是否是存在 值=(下標+1);
1、將 0 和負數轉換為 非[1,numsize] 範圍內的數字;
2、獲取資料值的絕對值(絕對值是為了保留值的大小,不可丟失,後面還要判斷),若在value [1,numsize] 範圍內,則將下標為 value-1 對應轉換為 負值,絕對值大小不變;
3、從頭遍歷陣列,若(下標+1)的值為正則返回(下標+1);
int
cmp(
const
void
*a,const
void
*b)elseif(
*(int*
)b <0)
return*(
int*
)a -*(
int*
)b;}
intfirstmissingpositive
(int
* nums,
int numssize)
else
if(iflag)
}return j;
}
int
firstmissingpositive
(int
* nums,
int numssize)
}for
(i=0
;ireturn i+1;
}
int
firstmissingpositive
(int
* nums,
int numssize)
}for
(i=0
;ifor(i=
0;ireturn i+1;
}
力扣41 缺失的第乙個正數
題目描述 給你乙個未排序的整數陣列,請你找出其中沒有出現的最小的正整數。你的演算法的時間複雜度應為o n 並且只能使用常數級別的額外空間。思路 如果沒有時間複雜度和空間複雜度要求,直接排序或者雜湊表均可解決。常數級別的額外空間,則只能在輸入陣列原地交換。若是已排序的陣列,滿足x 對陣列每個元素進行遍...
力扣刷題 41 缺失的第乙個正數
思路 參考了大佬的方法三 將陣列視為雜湊表 整體的思路是每乙個正整數i對應的下標為i 1,通過for及while迴圈將每個正整數交換到正確的位置,然後從第0位開始迴圈查詢,如果出現數 位不匹配則輸出該下標本該對應的正數,即為缺失的第乙個正數。原地雜湊 雜湊函式為 f nums i nums i 1 ...
力扣41 缺失的第乙個正數 題解
給你乙個未排序的整數陣列,請你找出其中沒有出現的最小的正整數。示例 1 輸入 1,2,0 輸出 3 示例 2 輸入 3,4,1,1 輸出 2 剛開始,覺得這道題可能要考察時間複雜度,因為正確率只有40 懷疑存在坑導致樣例通不過。寫完 沒想到一遍執行就過了。複雜度還不錯,o n 我使用雜湊表來儲存陣列...