• 【力扣每日一题】2023.9.5 从两个数字数组里生成最小数字


    目录

    题目:

    示例:

    分析:

    代码:


    题目:

    示例:

    分析:

    题目给我们两个数字数组,要我们用这两个数组里的元素组成一个数字,这个数字里需要同时拥有两个数组里的至少一个元素。

    组成数字有两种情况,一种是只有一位数,另一种是有两位数。

    一位数的时候就是两个数组共同拥有同一个元素,那么我们组成的数字就是这个数即可,如果两个数组有多个共同拥有的数字,那么我们取最小的。

    两位数的情况是两个数组没有共同拥有相同元素,那么我们要做的就是将两个数组的最小元素分别取出,要组成的数字最小,我们就将较小的数字作为十位数,而较大的数作为个位数。

    我们要找出最小数,那么可以直接对每个数组进行一个for循环寻找,不过我们还需要先判断两个数组共同拥有的最小元素是多少,因此我认为对数组进行一个排序操作比较方便。

    我实现的手段有两种,一种是用利用set自动对元素排序的特性,另一种是直接对数组进行排序。

    如果是用set的话,那么找出两个数组的公共最小元素会方便一些,因为set自带api去寻找某个元素。

    如果是直接排序的话,就两层for循环遍历两个数组去寻找公共元素,因为是排过序的,所以找到的第一个元素就是最小的公共元素。

    因为测试用例的数据量非常小,所以性能上没有太大差异。

    代码:

    1. class Solution {
    2. public:
    3. int minNumber(vector<int>& nums1, vector<int>& nums2) {
    4. //利用set
    5. set<int>s1(nums1.begin(),nums1.end());
    6. set<int>s2(nums2.begin(),nums2.end());
    7. //set默认升序排序,从小到大遍历,第一个发现的两个数组都有的元素就是最小的元素,直接返回即可
    8. for(int num:s1) if(s2.count(num)) return num;
    9. int n1=*(s1.begin()),n2=*(s2.begin()); //取出两个set的第一个元素,就是两个数组的最小元素
    10. if(n1>n2) return n2*10+n1; //将较小的数作为十位数
    11. return n1*10+n2;
    12. //直接排序
    13. sort(nums1.begin(),nums1.end()); //直接对数组排序
    14. sort(nums2.begin(),nums2.end());
    15. for(int n1:nums1){
    16. for(int n2:nums2){
    17. if(n1==n2) return n1; //因为排过序了,所以发现有相同的元素返回即可.
    18. }
    19. }
    20. if(nums1[0]>nums2[0]) return nums2[0]*10+nums1[0]; //将较小的数作为十位数
    21. return nums1[0]*10+nums2[0];
    22. }
    23. };

  • 相关阅读:
    31-jwt认证
    pc端 复制到剪切板
    Linux C 基于tcp和epoll在线聊天室
    剪切板中,经常用到的gpt编程提问
    vue 页面加水印
    时间序列预测的输入
    创邻科技Galaxybase图技术如何在网络攻击中为你保驾护航
    android 系统rc添加 shell运行脚本
    React hooks中 useState踩坑-=--异步问题
    软件测试技术之单元测试—工程师 Style 的测试方法(2)
  • 原文地址:https://blog.csdn.net/m0_63235356/article/details/132689920