Given an unsorted integer array nums. Return the smallest positive integer that is not present in nums.
You must implement an algorithm that runs in O(n) time and uses O(1) auxiliary space.
정렬되지 않은 정수 배열 nums가 주어졌습니다. nums에 존재하지 않는 가장 작은 양의 정수를 반환합니다.
O(n) 시간에 실행되고 O(1) 보조 공간을 사용하는 알고리즘을 구현해야 합니다.
Example 1:
Input: nums = [1,2,0]
Output: 3
Explanation: The numbers in the range [1,2] are all in the array.
Example 2:
Input: nums = [3,4,-1,1]
Output: 2
Explanation: 1 is in the array but 2 is missing.
Example 3:
Input: nums = [7,8,9,11,12]
Output: 1
Explanation: The smallest positive integer 1 is missing.
Constraints:
- 1 <= nums.length <= 10^5
- -2^31 <= nums[i] <= 2^31 - 1
코드 1
class Solution {
fun firstMissingPositive(nums: IntArray): Int {
for (i in nums.indices) {
if (nums[i] < 0) {
nums[i] = 0
}
}
for (i in nums.indices) {
val num = Math.abs(nums[i])
if (num in 1..nums.size) {
if (nums[num - 1] > 0) {
nums[num - 1] *= -1
} else if (nums[num - 1] == 0) {
nums[num - 1] = -1 * (nums.size + 1)
}
}
}
for (i in nums.indices) {
if (nums[i] >= 0) {
return i + 1
}
}
return nums.size + 1
}
}
코드 2
class Solution {
fun firstMissingPositive(nums: IntArray): Int {
nums.forEachIndexed { i, v ->
if (v <= 0) {
nums[i] = nums.size + 1
}
}
for (i in nums.indices) {
val idx = Math.abs(nums[i]) - 1
if (idx in 0..nums.size - 1 && nums[idx] > 0) {
nums[idx] *= -1
}
}
nums.forEachIndexed { i, v ->
if (v > 0) {
return i + 1
}
}
return nums.size + 1
}
}
'LeetCode > Array & Hashing' 카테고리의 다른 글
[LeetCode][Kotlin] 2483. Minimum Penalty for a Shop (0) | 2024.10.18 |
---|---|
[LeetCode][Kotlin] 665. Non-decreasing Array (0) | 2024.10.18 |
[LeetCode][Kotlin] 304. Range Sum Query 2D - Immutable (0) | 2024.10.18 |