기록
LeetCode 945. Minimum Increment to Make Array Unique
쿠케캬캬
2024. 6. 15. 14:09
반응형
https://leetcode.com/problems/minimum-increment-to-make-array-unique
nums를 정렬하고, 동일한 수가 연속해서 나타나면 queue에 임시로 넣어줍니다.
nums[i]와 nums[i - 1] 사이에 2 이상의 간격이 나타나면, 해당 간격에 queue에 임시로 넣었던 값들을 채워줍니다.
O(nlogn)에 풀 수 있었습니다.
class Solution {
public:
int minIncrementForUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
queue<int> q;
int prev = nums[0];
int res = 0;
for(int i=1; i<nums.size(); i++) {
if(nums[i] == prev) {
q.push(nums[i]);
} else {
for(int val = prev + 1; !q.empty() && val < nums[i]; val++) {
res += val - q.front();
q.pop();
}
}
prev = nums[i];
}
while(!q.empty()) {
res += ++prev - q.front();
q.pop();
}
return res;
}
};
다음과 같이 개선할 수 있었습니다.
값이 증가해야하는 최소 기준점을 찾고, 그 수부터 1씩 올라가야합니다.
class Solution {
public:
int minIncrementForUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
int start = nums[0] + 1, res = 0;
for(int i=1; i<nums.size(); i++) {
if (start < nums[i]) start = nums[i] + 1;
else res += start++ - nums[i];
}
return res;
}
};
반응형