class Solution {
public:
vector<int> duplicates(vector<int>& nums){
unordered_set<int> uSet;
int n = nums.size();
vector<int> dup(n, 0);
for(int i = 0 ; i < n ;i++){
if(uSet.find(nums[i]) != uSet.end()){
dup[i] = 1;
}
if(i != 0)
dup[i] += dup[i-1];
uSet.insert(nums[i]);
}
return dup;
}
int minOperations(vector<int>& nums) {
sort(nums.begin(), nums.end());
int req = nums.size() - 1 , ans = nums.size() - 1, n =nums.size();
vector<int> d = duplicates(nums);
for(int ptr = 0; ptr < n-1 ;ptr++ ){
int idx = lower_bound(nums.begin(), nums.end(), req + nums[ptr]) - nums.begin();
if(idx < n ){
int val = nums[ptr] + req;
if(nums[idx] != val)
ans = min(ans, n - idx + ptr + d[idx] - d[ptr]);
else
ans = min(ans, n - idx + ptr - 1 + d[idx] - d[ptr]);
}
else
ans = min(ans, d[n-1] - d[ptr]+ptr);
}
return ans;
}
};
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter