题目链接:2605. 从两个数字数组里生成最小数字
方法:哈希
解题思路
本题有两种情况:
- 两个数组有共同元素,则取其中最小值返回;
- 两个数组没有共同元素,则取两个数组中各自的最小元素组成最小的两位数返回。
代码
class Solution {
public:
int minNumber(vector<int>& nums1, vector<int>& nums2) {
int min1 = 10, min2 = 10, cur = 10;
vector<int> cnt(10);
for (auto &num : nums1) {
cnt[num] ++ ;
if (cnt[num] == 2) cur = min(cur, num);
min1 = min(min1, num);
}
for (auto &num : nums2) {
cnt[num] ++ ;
if (cnt[num] == 2) cur = min(cur, num);
min2 = min(min2, num);
}
if (cur != 10) return cur; // 有共同元素
return min(10 * min1 + min2, 10 * min2 + min1); // 没有共同元素
}
};
复杂度分析
时间复杂度:\(O(1)\);
空间复杂度:\(O(1)\)。