入门力扣自学笔记278 C++ (题目编号:2605)

2605. 从两个数字数组里生成最小数字

题目:

给你两个只包含 1 到 9 之间数字的数组 nums1nums2 ,每个数组中的元素 互不相同 ,请你返回 最小 的数字,两个数组都 至少 包含这个数字的某个数位。


示例 1:

复制代码
输入:nums1 = [4,1,3], nums2 = [5,7]
输出:15
解释:数字 15 的数位 1 在 nums1 中出现,数位 5 在 nums2 中出现。15 是我们能得到的最小数字。

示例 2:

复制代码
输入:nums1 = [3,5,2,6], nums2 = [3,1,7]
输出:3
解释:数字 3 的数位 3 在两个数组中都出现了。

提示:

  • 1 <= nums1.length, nums2.length <= 9
  • 1 <= nums1[i], nums2[i] <= 9
  • 每个数组中,元素 互不相同

思路:

首先,建立一个哈希表,并且遍历nums1来更新哈希表。

其次,我们遍历nums2,如果两个容器存在相同的元素,那么返回最小的相同元素结果即可。

最后,如果不存在相同元素,那么对两个vector容器进行排序,找到两个容器的最小元素,并且构成最小的两位数即可。


代码:

cpp 复制代码
class Solution {
public:
    int minNumber(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int,int> hash;
        for(auto &i : nums1)
            ++hash[i];
        int ans = 100;
        for(auto &i :nums2)
            if(hash.find(i) != hash.end())
                ans = min(ans,i);
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        int tmp = nums1[0];
        ans = min(tmp * 10 + nums2[0],ans);
        tmp = nums2[0];
        ans = min(tmp * 10 + nums1[0],ans);
        return ans;
    }
};
相关推荐
KaMeidebaby5 分钟前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
陌路2015 分钟前
C++高级进阶--夯实进阶基础(1)
开发语言·c++
无限码力20 分钟前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题
BlockWay1 小时前
WEEX Labs 周度观察:微软-OpenAI 合作调整与AI 多云趋势
大数据·人工智能·算法·安全·microsoft
风筝在晴天搁浅1 小时前
快手 CodeTop LeetCode 224.基本计算器
数据结构·算法·leetcode
Smoothcloud润云1 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text
郝学胜-神的一滴2 小时前
中级OpenGL教程 008:精准控制高光光斑大小与强度
c++·unity·godot·three.js·图形学·opengl·unreal
计算机安禾2 小时前
【算法分析与设计】第41篇:确定性与非确定性多项式时间:P与NP的形式化
算法
牢姐与蒯2 小时前
c++数据结构之c++11(一)
数据结构·c++
折戟不必沉沙2 小时前
构造和析构函数能否是虚函数?能否调用虚函数?
c++