紧接着笔者又刷了一道和刚刚比较类似的题,并且这道题还简单些,下面来分享一下经验吧!
题目如下:
Given an array of integers, find if the array contains any duplicates.
Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.
Example 1:
Input: [1,2,3,1]
Output: true
Example 2:
Input: [1,2,3,4]
Output: false
Example 3:
Input: [1,1,1,3,3,4,3,2,4,2]
Output: true
题意分析:
给定一个整数数组,判断是否存在两个相等元素(两元素的下标不可一样),最后返回bool型的true或false。
解答如下:
方法一(暴力解法)
用两层for循环“不重复”的遍历所有不同组合,并判断是否满足nums[i] == nums[j] ,是则返回true,否则继续遍历。直到所有组合都被遍历完都没找到,最后返回false。
class Solution{
public:
bool containsDuplicate( vector<int>& nums ){
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
if ( nums[i] == nums[j] )
return true;
}
}
return false;
}
};
提交后的结果如下:
方法二(用查找表)
首先创建一个unordered_map型的变量record,其键为数组的元素值,其值为对应元素出现的频次。用一个for循环遍历整个数组,每当需要记录元素出现频次之前,先判断该元素值是否曾被记录过,如果记录过则返回true,否则记录下该元素并继续遍历。直到所有组合都被遍历完都没找到,最后返回false。
代码①(用 record[nums[i]] > 0 进行判读)
class Solution{
public:
bool containsDuplicate( vector<int> nums ){
unordered_map<int, int> record;
for ( int i = 0; i < nums.size(); i++ ) {
if (record[nums[i]] > 0)
return true;
else
record[nums[i]] ++;
}
return false;
}
};
代码①(用 record.find(nums[i]) != record.end() 进行判读)
class Solution{
public:
bool containsDuplicate( vector<int> nums ){
unordered_map<int, int> record;
for ( int i = 0; i < nums.size(); i++ ) {
if ( record.find(nums[i]) != record.end() )
return true;
else
record[nums[i]] ++;
}
return false;
}
};
提交后的结果如下:
日积月累,与君共进,增增小结,未完待续。