最近加班比较多,很久没刷题了,加班过程中也收获了不少,等过两天清闲的时候总结一下,今天先看一下每日一题,刚好赶上一道简单的每日一题
1、思路
用unordered_map<int,int>做一个计数,当计数为2的时候,证明nums1和nums2有重复的值,因此返回最小的重复值,若没有最小值,则对nums1和num2进行排序,然后取第一个值,进行组合,即为最小值
2、代码实现
class Solution {
public:
int minNumber(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int, int> umap;
int ret = INT_MAX;
for (auto a : nums1) {
umap[a]++;
}
for (auto b : nums2) {
umap[b]++;
if (umap[b] > 1) {
ret = min(ret, b);
}
}
if (ret != INT_MAX) return ret;
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
if (nums1[0] < nums2[0]) {
return nums1[0] * 10 + nums2[0];
}
return nums2[0] * 10 + nums1[0];
}
};
3、区别
看官网题解使用了unordered_set<int>,在这里再复习一下,set、map、unordered_map和unordered_set的区别:
map | set | unordered_map | unordered_set | |
底层实现 | 红黑树(自平衡二叉查找树) | 红黑树 | 哈希表 | 哈希表 |
特点 | 有序性(效率高,很多操作都可以再lgn的时间复杂度下完成,然而其空间占用率高) | 有序 | 查找速度很快,然而更改哈希表的大小,重构哈希表比较耗费时间 | 无序,插入,删除,查找元素的时间复杂度n |
适用 | 对顺序有要求的问题,数据量小,对内存使用要求比较高的情况 | 需要排序的数据 | 对于查找无序的数据问题,会更高效,数据量大,并且需要频繁查找 | 不需排序,无需便利 |
这周末复习一下map和set等容器