[leetCode 丶 20241118] 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
  • 每个数组中,元素 互不相同

个人版答案

执行用时: 2 ms 执行内存消耗: 40.55 M

class Solution {
    public int minNumber(int[] nums1, int[] nums2) {
        int[] count = new int[9];
        for(int i  =0; i < nums1.length;i++){
            count[nums1[i] - 1] += 1;
        }
        for(int i  =0; i< nums2.length;i++){
            count[nums2[i] - 1] += 1;
        }
        int z = 0;
        for(int i  =0; i< count.length;i++){
            if(count[i] == 2){
                if(z == 0){
                    z = i+1;
                }
            }
        }
        if(z > 0){
            return z;
        }    
        int m1 = Arrays.stream(nums1).min().getAsInt();
        int m2 = Arrays.stream(nums2).min().getAsInt();  
        return 10 * Math.min(m1,m2) + Math.max(m1, m2);
    }
}

优秀解法

执行耗时: 0 ms

class Solution {
    public int minNumber(int[] nums1, int[] nums2) 
    {
        int i, min=100, min1=10, min2=10, m;
        int[] a = new int[11];
        for(i=0;i<nums1.length;i++)
        {
            a[nums1[i]] = 1;
            if(nums1[i] < min1){
                min1 = nums1[i];
            }
        }
        for(i=0;i<nums2.length;i++)
        {
            if(a[nums2[i]] == 1)
            {
                if(min > nums2[i])
                {
                    min = nums2[i];
                }
            }
            if(nums2[i] < min2){
                min2 = nums2[i];
            }
        }
        if(min1*10+min2 > min2*10+min1)
        {
            m = min2*10+min1;
        }
        else
        {
            m = min1*10+min2;
        }
        if(min>m){
            min = m;
        }
        return min;
    }
}

个人解题思路与优秀答案解析

题目分析及个人版思路

  1. 秒了...合并排序, 取前两个...
  2. 错了...相同数字当个位数...
  3. 已知大小, 桶排序. 数量大于2则为交集. 拿最小交集
  4. 没有交集则获取各个数组中个最小的值, 两个最小值中的最小值当十位数, 另一个则是个位数...
  5. 没想到这样也会翻车...-_-||

进阶版思路
大合并...天才!!!