問題
給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。
示例 1:
輸入: [1,2,0]
輸出: 3
示例 2:
輸入: [3,4,-1,1]
輸出: 2
示例 3:
輸入: [7,8,9,11,12]
輸出: 1
說明:你的演算法的時間複雜度應為o(n),並且只能使用常數級別的空間。
思考
有的小夥伴上來說這個題太簡單了,直接進行乙個同樣大小的陣列的儲存,之後將存在資料的對應位置設定為1,尋找第乙個不為1的位置即可。但是關鍵點在於說明中,要求複雜度和空間有限。
因此這就複雜了,但是思路在於,既然要求時間複雜度為o(n),並且空間為常數,那答案就在「遍歷一次」和「交換位置」這兩個策略的結合中。
最後其實答案是遍歷兩次,交換位置,但兩次遍歷疊加仍舊是o(n)的時間複雜度。
演算法說明
將陣列從第乙個位數開始,將其交換到自己應該在的位置上。並且交換一次後,再次進行交換確保當前位置已經是乙個確定不會再移動的資料。之後依次向後推進。
注意對幾種情況的考慮:小於0、等於0、大於陣列邊際
**
public class _41firstmissingpositive
}for(int i=0;i}
//there is nothing to response
return result;
}public static void main(string arg);
int input2 =;
int input3 = ;
system.out.println(firstmissingpositive.firstmissingpositive(input1));
system.out.println(firstmissingpositive.firstmissingpositive(input2));
system.out.println(firstmissingpositive.firstmissingpositive(input3));
}}
資料庫遞迴演算法jav
表結構 欄位1 欄位2 1 02 1 3 14 2 5 26 4 根據父id查詢子id public static arraylist getallsubcateidfromparentcateid string parentid throws exception db.close return l...
Leetcode 232 用棧實現佇列 java
使用棧實現佇列的下列操作 push x 將乙個元素放入佇列的尾部。pop 從佇列首部移除元素。peek 返回佇列首部的元素。empty 返回佇列是否為空。示例 myqueue queue new myqueue queue.push 1 queue.push 2 queue.peek 返回 1 qu...
Leetcode題解1 最長回文子串 JAVA
題目 given a strings,find the longest palindromic substring ins.you may assume that the maximum length ofsis 1000.example 1 input babad output bab note ...