1.unoredred_map
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int>m;
int n=nums.size();
int M=0,cnt=0;
for(int i=0;i<n;i++){
m[nums[i]]++;
if(m[nums[i]]>cnt){
M=nums[i];
cnt=m[nums[i]];
}
}
return M;
}
};
2.unorder_set
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
unordered_set<int>s1;
unordered_set<int>s2;
for(int num:nums){
if(s2.count(num-k)){
s1.insert(num-k);
}
if(s2.count(num+k)){
s1.insert(num);
}
s2.insert(num);
}
return s1.size();
}
};
3.通过改变数组元素的值的方法达到将空间复杂度变为O(1)
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size();
for (int& num: nums) {
if (num <= 0) {
num = n + 1;
}
}
for (int i = 0; i < n; ++i) {
int num = abs(nums[i]);
if (num <= n) {
nums[num - 1] = -abs(nums[num - 1]);
}
}
for (int i = 0; i < n; ++i) {
if (nums[i] > 0) {
return i + 1;
}
}
return n + 1;
}
};