-
解题思路
- 法一:先将数组排序,再利用候选数组(跟26. 删除有序数组中的重复项一样),如果候选数组最后的索引与原数组长度-1相等,则没有相同的元素
- 查找可以利用哈希表,如果当前元素没有在哈希表中,则把当前元素添加进去,如果在,则直接返回false。
-
代码
法一:class Solution { public: bool containsDuplicate(vector<int>& nums) { int len = nums.size(); sort(nums.begin(),nums.end()); int j = 0; for(int i = 1;i<len;++i){ if(nums[j] != nums[i]) nums[++j] = nums[i]; } if(j == len-1) return false; return true; } };
class Solution { public: bool containsDuplicate(vector<int>& nums) { int len = nums.size(); sort(nums.begin(),nums.end()); auto it = unique(nums.begin(),nums.end()); auto newLenth = it-nums.begin(); if(newLenth == len) return false; return true; } };
法二:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int len = nums.size();
unordered_set<int> hashTable;
for(int i = 0;i<len;++i){
if(hashTable.find(nums[i]) != hashTable.end()) return true;
hashTable.insert(nums[i]);
}
return false;
}
};
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int len = nums.size();
unordered_map<int,int> hashTable;
for(int num:nums){
++hashTable[num];
if(hashTable[num] >1 ) return true;
}
return false;
}
};
2154.将找到的值乘以2
还是需要查找,可以用哈希表。
同样的,在数组中先排序,然后一个一个找。
class Solution {
public:
int findFinalValue(vector<int>& nums, int original) {
int len = nums.size();
unordered_set<int> hashTable;
for(int i = 0; i<len; ++i) hashTable.insert(nums[i]);
while(hashTable.find(original) != hashTable.end()) original *= 2;
return original;
}
};
class Solution {
public:
int findFinalValue(vector<int>& nums, int original) {
unordered_set<int> hashTable(nums.begin(),nums.end());
while(hashTable.count(original)) original *= 2;
return original;
}
};
class Solution {
public:
int findFinalValue(vector<int>& nums, int original) {
sort(nums.begin(),nums.end());
for(int num:nums){
if(num == original) original *= 2;
}
return original;
}
};