移除数组中的元素
个人思路解法:先置0 并 计数,然后由大到小排序,较复杂,多了一个排序动作。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int num = 0;
if(nums.size() == 0)
return 0;
for(int i = 0; i< nums.size();i++)
{
if (nums[i] == val)
{
nums[i] = 0;
num++;
}
}
sort(nums.begin(),nums.end(),greater<int>());
return nums.size() - num;
}
};
网友解法:太妙了!!!本人想不到【裂开,怀疑不适合编程N+1次】
原地覆盖思路
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
if(nums.size() == 0)
return 0;
int j = 0;
for(int i = 0; i < nums.size() ; i++)
{
if(nums[i] != val)
{
nums[j] = nums[i];
j++;
}
}
return j;
}
};
存在重复元素
//官方解法
//滑动窗口+有序集合
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
int n = nums.size();
set<int> rec;
for (int i = 0; i < n; i++) {
auto iter = rec.lower_bound(max(nums[i], INT_MIN + t) - t);
if (iter != rec.end() && *iter <= min(nums[i], INT_MAX - t) + t) {
return true;
}
rec.insert(nums[i]);
if (i >= k) {
rec.erase(nums[i - k]);
}
}
return false;
}
};
链接:https://leetcode-cn.com/problems/contains-duplicate-iii/solution/cun-zai-zhong-fu-yuan-su-iii-by-leetcode-bbkt/