You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 1. 무식하게 풀기// 배열을 순회하며 1부터 검사 = count// 값이 있다면 count 증가// 0이나 음수는 무시// O(n)에 돌아야하기에 불가능//classSolution {
public:intfirstMissingPositive(vector<int>& nums) {
int count = 1;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i++) {
if (nums[i] < 0) continue;
if (count == nums[i]) count++;
}
return count;
}
};
쉽게 풀이하는 방법은 다음과 같다. 하지만 시간 복잡도 때문에 인덱스를 숫자 그대로 정렬하는 기법이 필요함
classSolution {
public:intfirstMissingPositive(vector<int>& nums) {
int n = nums.size();
// 배열을 정렬하는 대신, 각 숫자를 그 숫자가 있어야 할 위치로 이동for (int i = 0; i < n; ++i) {
while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
swap(nums[i], nums[nums[i] - 1]);
}
}
// 첫 번째로 잘못된 위치의 숫자 찾기for (int i = 0; i < n; ++i) {
if (nums[i] != i + 1) {
return i + 1;
}
}
// 모든 숫자가 제자리에 있을 경우, n + 1이 첫 번째 누락된 양수return n + 1;
}
};
The text was updated successfully, but these errors were encountered:
The text was updated successfully, but these errors were encountered: