目录
🚩存在重复元素1
🎈了解题意
🎈算法原理
🎈实现代码
🚩存在重复元素2
🎈了解题意
🎈算法原理
🎈代码实现
217. 存在重复元素 - 力扣(LeetCode)
🚩存在重复元素1
🎈了解题意
数组中存在重复元素的值那么就返回true,否则返回false即可。
🎈算法原理
本题不用键值对,记录下标以及下标的值,我们只需要看是否存不存在这个hash值即可
所以我们用Set容器,我们遍历数组,如果存在,那么就返回true,如果不存在,那么就将这个元素插入到hash中去。遍历完数组之后,直接返回false即可。
🎈实现代码
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> hash;
for(auto x:nums){
if(hash.count(x))return true;//如果存在就直接返回true
else hash.insert(x);//如果不存在,那么就插入该值
}
return false;
}
};
🚩存在重复元素2
219. 存在重复元素 II - 力扣(LeetCode)
🎈了解题意
这一题和上一题的其实就增加了多了一个条件,就是找到重复的数字之后,我们还要判断一下,这俩个相同的数字的下标之差是不是小于等于k,如果小于等于k,那么就返回true,如果大于k,那么返回false。
🎈算法原理
这一题不仅要存入hash表中存入当前i下标的值,还要存入下标,所以这题需要用到map键值对,第一个代表对应的值,第二个代表下标。
- 1.依次遍历
- 2.如果当前的值不存在,那么就将下标赋值给当前下标对应的值,如果存在 ,继续判断一下是否俩者的下标之差小于等于k。
🎈代码实现
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int,int>hash;
for(int i=0;i<nums.size();i++){
if(hash.count(nums[i])){
if(i-hash[nums[i]]<=k){
return true;
}
}
hash[nums[i]]=i;
}
return false;
}
};
野心。