学习目标:
leetcode 刷题
学习内容:
存在重复元素
link:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x248f5/
(1)暴力解法
(2)排序
(3)set函数&哈希表
只出现一次的数字
(1)暴力
(2)排序
(3)哈希表
(4)异或
link:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x21ib6/
学习时间:
2022.4.22 上午
学习产出:
存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
第一种思路:暴力破解
第二种思路:先排序再比较有无重复
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(), nums.end()); //对nums排序
for (int i = 1; i < nums.size(); i++) {
if (nums[i] == nums[i - 1]) {
return true;
}
}
return false;
}
};
第三种思路:利用set函数去掉重复的元素和原来的长度作比较&&利用哈希表,如果插入一个函数后发现已经存在,就是已有的
class Solution { //官方答案
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s;
for (int x: nums) {
if (s.find(x) != s.end()) {
return true;
}
s.insert(x);
}
return false;
}
};
只出现一次的数字
第一种思路:大力出奇迹
第二种排序:排序后比较前后
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end()); //排序
if(nums[0]!=nums[1]||nums.size()==1)
return nums[0];
for(int i=1;i<nums.size();++i)
{
if(nums[i-1]!=nums[i]&&nums[i]!=nums[i+1]) //前后不一致就是要找的
return nums[i];
}
return 0;
}
};
第三种思路:利用哈希表
第四种思路:位运算(异或)
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ret = 0;
for (auto e: nums) ret ^= e;
return ret;
}
};