LeetCode 41 缺失的第一個整數
阿新 • • 發佈:2020-11-12
LeetCode41 缺失的第一個整數
題目描述
給你一個未排序的整數陣列,請你找出其中沒有出現的最小的正整數。
樣例
輸入: [1,2,0]
輸出: 3
輸入: [3,4,-1,1]
輸出: 2
輸入: [7,8,9,11,12]
輸出: 1
演算法分析
畫個圖可能好理解一些
思想:使得nums[0] = 1, nums[1] = 2...
- 遍歷,若他
[1,n]
, 且nums[i] != i+1
這個規律 - 交換到他因該到的位置
swap(i, nums[i] - 1)
他應該到的位置就是 nums[i]
應該在nums[i]-1
這個位置上
注意:交換的兩個值不能相同哦
時間複雜度
\(O(n)\)
Java程式碼
class Solution { static void swap(int[] nums, int a, int b){ int t = nums[a]; nums[a] = nums[b]; nums[b] = t; } public int firstMissingPositive(int[] nums) { int n = nums.length; for(int i = 0; i < n; i ++){ while(nums[i] > 0 && nums[i] < n && nums[i] != i+1 && nums[i] != nums[nums[i] - 1]){ swap(nums, i, nums[i] - 1); } } for(int i = 0; i < n; i ++){ if(nums[i] != i + 1){ return i+1; //這個位置缺少的那個值就是ans } } return n+1; } }