diff --git a/Java/FirstMissingPositive.java b/Java/FirstMissingPositive.java new file mode 100644 index 00000000..1ccf730f --- /dev/null +++ b/Java/FirstMissingPositive.java @@ -0,0 +1,34 @@ +/* +Question: +Given an unsorted integer array nums, return the smallest missing positive integer. +You must implement an algorithm that runs in O(n) time and uses constant extra space. + */ + +class Solution { + public int firstMissingPositive(int[] nums) { + int i = 0; + while (i < nums.length) { + int correct = nums[i] - 1; + if (nums[i]>0 && nums[i]<=nums.length && nums[i] != nums[correct]) { + swap(nums, i, correct); + } else { + i++; + } + } + int ans = 0; + for (int j = 0; j < nums.length; j++) { + if (nums[j] != j + 1) { + ans = j + 1; + return ans; + } + } + return nums.length+1; + } + + static void swap(int[] nums, int first, int second) { + int temp = nums[first]; + nums[first] = nums[second]; + nums[second] = temp; + } + +}