力扣第2605题 从两个数字数组里生成最小数字 c++暴力必会

题目

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

示例 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
  • 每个数组中,元素 互不相同 。

解法

# 思路

> 首先,我们定义一个变量 ans 来保存结果,初始值设为无穷大。

>然后,我们遍历 nums1 数组的每个数字,记当前数字为 num1。

>在遍历 nums2 数组的每个数字之前,我们需要判断当前数字 num1 是否已经出现在 nums2 数组中。如果是,则将 num1 更新到 ans 中,因为它是最小的数字。

>在遍历 nums2 数组的每个数字时,记当前数字为 num2。

>接下来,我们将 num1 和 num2 分别拼接成两个数,即 num1 * 10 + num2 和 num2 * 10 + num1。然后,我们递归调用函数,传入更新后的 nums1 和 nums2 数组,以及 ans 的值。

# 解题方法

> 描述你的解题方法

# 复杂度

- 时间复杂度:

> $O(n^2)$ 这个算法的时间复杂度是$O(n^2)$ ,其中n为两个数组总元素数量,因为使用两个循环遍历数组。

- 空间复杂度:

> $O(1)$  空间复杂度是O(1),因为空间使用不随输入规模变化。

> 对于数字范围较小的情况下,这样的算法已经足够快。但是如果数字范围较大时,可以考虑使用排序等其他方法进行优化。

c++ 代码

class Solution {
public:
    int minNumber(vector<int>& nums1, vector<int>& nums2) {
        int ans = 100;  // 初始化ans为一个较大的数,可以保证之后找到的数字小于ans

        // 两个循环遍历两个数组
        for (int i = 0; i < nums1.size(); i++)
        {
            for (int j = 0; j < nums2.size(); j++)
            {
                // 如果存在相同数字,更新ans为该数字
                if (nums1[i] == nums2[j])
                    ans = min(ans, nums1[i]);
                else 
                    // 如果不存在相同数字,则拼接数字并更新ans
                    ans = min({ ans,(nums1[i] * 10 + nums2[j]),(nums2[j] * 10 + nums1[i]) });
            }
        }
        return ans;
    }
};

# Code

```C++ []

class Solution {

public:

    int minNumber(vector<int>& nums1, vector<int>& nums2) {

        int ans = 100;  // 初始化ans为一个较大的数,可以保证之后找到的数字小于ans

        // 两个循环遍历两个数组

        for (int i = 0; i < nums1.size(); i++)

        {

            for (int j = 0; j < nums2.size(); j++)

            {

                // 如果存在相同数字,更新ans为该数字

                if (nums1[i] == nums2[j])

                    ans = min(ans, nums1[i]);

                else

                    // 如果不存在相同数字,则拼接数字并更新ans

                    ans = min({ ans,(nums1[i] * 10 + nums2[j]),(nums2[j] * 10 + nums1[i]) });

            }

        }

        return ans;

    }

};


 

```

posted @   lenyan~  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示