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

news2024/12/25 19:21:52

探寻两个数组数位关联下的最小数字问题

题目描述

给定两个只包含 1 到 9 之间数字的数组 nums1 和 nums2,并且每个数组中的元素都是互不相同的。我们需要返回最小的数字,要求这个数字满足两个数组都至少包含这个数字的某个数位。例如,若 nums1 = [4, 1, 3]nums2 = [5, 7],那么满足条件的最小数字就是通过相应规则计算出来的某个值(后续会详细讲解如何得出)。

解题思路

为了解决这个问题,我们可以分情况来思考并处理:

情况一:存在交集数字

首先尝试找出两个数组中共同出现的数字,也就是它们的交集部分。我们可以通过双层循环遍历两个数组,对每一个 nums1 中的元素,去和 nums2 中的所有元素进行比较。一旦发现有相同的数字,记录下来,并持续更新找到的最小的交集数字。若最终能找到交集数字,那么这个最小的交集数字必然就是我们要找的结果,因为它天然满足两个数组都包含其某个数位,而且在所有交集数字里是最小的,自然也就是符合要求的最小数字了。

情况二:不存在交集数字

要是经过前面的查找,发现两个数组没有共同的数字,那我们就分别找出 nums1 和 nums2 数组各自的最小数字,分别记为 min1 和 min2。接着,把这两个最小数字组合成两个不同顺序的两位数,具体来说,让 min1 作为十位数字、min2 作为个位数字组成一个数字 num1,反过来,让 min2 作为十位数字、min1 作为个位数字组成另一个数字 num2。最后返回这两个数字中较小的那个,它就是在没有交集数字情况下满足题目条件的最小数字了。

代码实现

#include <stdio.h>
#include <stdlib.h>

// 核心函数,用于找出满足条件的最小数字
int minNumber(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    // 用于记录是否存在交集数字以及交集中最小的数字,初始化为较大值方便比较更新
    int minIntersection = 10;
    // 标记是否存在交集,初始化为0表示不存在
    int hasIntersection = 0;

    // 寻找两个数组的交集数字,并确定交集中最小的数字
    for (int i = 0; i < nums1Size; ++i) {
        for (int j = 0; j < nums2Size; ++j) {
            if (nums1[i] == nums2[j]) {
                hasIntersection = 1;
                if (nums1[i] < minIntersection) {
                    minIntersection = nums1[i];
                }
            }
        }
    }
    // 如果存在交集,直接返回交集中最小的数字
    if (hasIntersection) {
        return minIntersection;
    }

    // 分别找出nums1和nums2数组中的最小数字
    int min1 = 10, min2 = 10;
    for (int i = 0; i < nums1Size; ++i) {
        if (nums1[i] < min1) {
            min1 = nums1[i];
        }
    }
    for (int i = 0; i < nums2Size; ++i) {
        if (nums2[i] < min2) {
            min2 = nums2[i];
        }
    }

    // 组成两种顺序的数字并返回较小的那个
    int num1 = min1 * 10 + min2;
    int num2 = min2 * 10 + min1;
    return num1 < num2? num1 : num2;
}

// 测试函数,用于执行多个测试用例并展示结果
void testMinNumber() {
    // 测试用例 1
    int nums1_1[] = {4, 1, 3};
    int nums1Size_1 = sizeof(nums1_1) / sizeof(nums1_1[0]);
    int nums2_1[] = {5, 7};
    int nums2Size_1 = sizeof(nums2_1) / sizeof(nums2_1[0]);
    int result_1 = minNumber(nums1_1, nums1Size_1, nums2_1, nums2Size_1);
    printf("测试用例 1: nums1 = {4, 1, 3}, nums2 = {5, 7}, 结果: %d\n", result_1);

    // 测试用例 2
    int nums1_2[] = {1, 2, 3};
    int nums1Size_2 = sizeof(nums1_2) / sizeof(nums1_2[0]);
    int nums2_2[] = {4, 5, 6};
    int nums2Size_2 = sizeof(nums2_2) / sizeof(nums2_2[0]);
    int result_2 = minNumber(nums1_2, nums1Size_2, nums2_2, nums2Size_2);
    printf("测试用例 2: nums1 = {1, 2, 3}, nums2 = {4, 5, 6}, 结果: %d\n", result_2);

    // 测试用例 3
    int nums1_3[] = {2, 8};
    int nums1Size_3 = sizeof(nums1_3) / sizeof(nums1_3[0]);
    int nums2_3[] = {7, 9};
    int nums2Size_3 = sizeof(nums2_3) / sizeof(nums2_3[0]);
    int result_3 = minNumber(nums1_3, nums1Size_3, nums2_3, nums2Size_3);
    printf("测试用例 3: nums1 = {2, 8}, nums2 = {7, 9}, 结果: %d\n", result_3);

    // 测试用例 4(存在交集情况)
    int nums1_4[] = {1, 5, 9};
    int nums1Size_4 = sizeof(nums1_4) / sizeof(nums1_4[0]);
    int nums2_4[] = {5, 8, 2};
    int nums2Size_4 = sizeof(nums2_4) / sizeof(nums2_4[0]);
    int result_4 = minNumber(nums1_4, nums1Size_4, nums2_4, nums2Size_4);
    printf("测试用例 4: nums1 = {1, 5, 9}, nums2 = {5, 8, 2}, 结果: %d\n", result_4);
}

int main() {
    testMinNumber();
    return 0;
}

寻找交集部分

在 minNumber 函数里,一开始我们定义了两个重要的变量:minIntersection 初始化为 10(由于题目中数字范围是 1 到 9,这个初始值方便后续比较更新找到交集中最小数字),以及 hasIntersection 并初始化为 0,用于标记是否存在交集情况。

然后通过两层嵌套的 for 循环来遍历数组 nums1 和 nums2,当 nums1 中的某个元素和 nums2 中的某个元素相等时,意味着找到了交集数字,此时把 hasIntersection 置为 1 表示存在交集,并且把当前相同的数字与 minIntersection 比较,如果当前数字更小,就更新 minIntersection 的值。

根据交集情况处理

如果经过前面的循环,hasIntersection 的值变为了 1,那就说明存在交集数字,这种情况下,我们直接返回 minIntersection,因为这个数字就是满足两个数组都包含其某个数位的最小数字了。

无交集时的处理

要是 hasIntersection 仍然是 0,也就是不存在交集,那我们就要分别找出数组 nums1 和 nums2 中的最小数字了。定义 min1 和 min2 并都初始化为 10,同样利用 for 循环遍历各自的数组,在循环过程中不断更新 min1 和 min2 为各自数组中的最小数字

得到两个最小数字后,按照之前说的思路,将它们组成两个不同顺序的两位数,也就是 num1min1 作为十位、min2 作为个位)和 num2min2 作为十位、min1 作为个位),最后通过三目运算符 return num1 < num2? num1 : num2; 返回这两个数字中较小的那个,而这个较小数字就是在没有交集数字的情况下,满足题目条件的最小数字了。

在 testMinNumber 函数中,我们定义了多个不同情况的测试用例,分别调用 minNumber 函数并输出相应的结果,方便直观地验证函数在不同输入情况下的正确性。

希望通过这篇博客,大家对这道有趣的编程题目有更深入的理解,并且能掌握相应的解题思路与代码实现方法。如果有任何疑问或者建议,欢迎在评论区留言交流呀!

上述代码中,minNumber 函数实现了核心的查找最小数字逻辑,而 testMinNumber 函数用于进行多组测试用例的验证,在 main 函数中调用 testMinNumber 函数来展示不同情况的测试结果,整体上可以更好地帮助理解整个解题过程以及代码的功能。你可以根据实际需要进一步拓展测试用例或者对代码进行优化调整等操作哦。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【magic-dash】01:magic-dash创建单页面应用及二次开发

文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…

重温设计模式--原型模式

文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象&#xff1b; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式&#xff0c;它的主要…

Kibana8.17.0在mac上的安装

1、Kibana是什么 Kibana是与elasticsearch配套使用的数据分析与可视化工具&#xff0c;通过Kibana可以轻松与es中存储的数据进行高效的交互&#xff0c;包括数据写入、检索、删除等操作&#xff0c;并可以通过编写部分代码将数据做成各种报表&#xff0c;从而进行非常直观的统…

61.基于SpringBoot + Vue实现的前后端分离-在线动漫信息平台(项目+论文)

项目介绍 随着社会互联网技术的快速发展&#xff0c;每个行业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线动漫信息平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线动漫信息平台&#xff0c;它彻底…

【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割

数据预处理 通过网盘分享的文件&#xff1a;银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs 非数值特征处理 目的&#xff1a;将非数值特征转换为数值型&#xff0c;以便模型能够处理。方法&#xff1a; 地理位置&am…

从零开始使用MaxKB打造本地大语言模型智能问答系统与远程交互

文章目录 前言1. 下载运行Ollama2. 安装大语言模型3. 安装Cpolar工具4. 配置公网地址5. 固定公网地址6. MaxKB 添加Olama7.创建问答应用 前言 目前大语言模型&#xff08;LLM&#xff09;已经成为了人工智能领域的一颗璀璨明星&#xff0c;从自然语言处理到智能问答系统&#…

neo4j无法导入csv文件

文章目录 问题解决方案1. 检查Neo4j的neo4j.conf配置文件2. 确保文件路径正确3. 将CSV文件放置到import目录4. 重启Neo4j服务器 问题 neo4j browser中导入csv文件报错无法导入 具体&#xff1a;输入下列语句LOAD CSV WITH HEADERS FROM “file:///D:/KG/relation.csv” AS lin…

WebLogic T3反序列化漏洞(CVE-2018-2628)--vulhub

WebLogic T3反序列化漏洞(CVE-2018-2628) WebLogic在通信过程中使用T3协议传输数据&#xff0c;涉及到了序列化和反序列化操作。 T3协议概述 T3协议是Oracle的私有协议&#xff0c;所以公开的相关资料比较少&#xff0c;这里结合其他师傅的博客简单对T3协议进行一个简要分析…

在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南

在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(Rockchip N…

scala借阅图书保存记录(三)

BookDAO package org.app package daoimport models.BookModelimport scala.collection.mutable.ListBuffer//图书&#xff0c;数据操作 class BookDAO {//加载图书&#xff0c;从文件中读入def loadBooks(): ListBuffer[BookModel] {val books new ListBuffer[BookModel]()…

无标记动作捕捉系统如何赋能体育运动分析,推动体育科学发展?

随着技术的不断发展与社会的需要&#xff0c;健康、科学运动成为了大众关注的一个热词。在韩国首尔的中央大学&#xff0c;其生物运动临床康复实验室和运动训练中心就致力于通过生物力学分析来研究与运动相关的伤害&#xff0c;并通过定制科学的训练计划来帮助运动员改进他们的…

Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果

目录 八、测试套件TestSuite和测试运行器TestRunner 1、基本概念 2、创建和使用测试套件 3、 自动发现测试用例、创建测试套件、运行测试 4、生成html的测试报告&#xff1a;HTMLTestRunner 1️⃣导入HTMLTestRunner模块 2️⃣运行测试用例并生成html文件 九、unittest…

[搜广推]王树森推荐系统笔记——曝光过滤 Bloom Filter

曝光过滤 & Bloom Filter 曝光过滤主要在召回阶段做&#xff0c;主要方法是Bloom Filter 曝光过滤问题 -如果用户看过某个物品&#xff0c;则不再把该物品曝光给该用户。 - 原因是重复曝光同一个物品会损害用户体验 - 但长视频通常没有曝光过滤&#xff08;youtube&…

JS CSS HTML 的代码如何快速封装

我们为什么要封装代码&#xff0c;是因为封装后的代码&#xff0c;会显得非常美观&#xff0c;减少代码的复用&#xff0c;方便我们更好的去维护代码&#xff0c;不用一个一个页面的去找去改&#xff0c;直接封装好的代码里面去改就可以了 目录 1.html代码封装 2.CSS代码封装 …

acme ssl证书自动续签 nginx

参考 github 官方操作 &#xff0c;acme操作说明 说下我的操作 安装 acme.sh curl https://get.acme.sh | sh source ~/.bashrc 2.注册 acme.sh --register-account -m 123qq.com 如果你在配置 acme.sh 时选择了其他 CA&#xff08;如 Let’s Encrypt&#xff09;&#xff…

【专题】2024抖音电商母婴行业分析报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38651 在数字化浪潮的席卷下&#xff0c;抖音电商母婴行业正经历着深刻变革。当下&#xff0c;年轻一代父母崛起&#xff0c;特别是 24 至 30 岁以及 18 至 23 岁的群体成为抖音母婴行业兴趣人群的主力军。他们带来全新育儿理念&…

设计模式之 abstract factory

适用场景 一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库&#xff0c;而只想显示它们的接口而不是实现时 架构演示 首先client这个东西可以接触到…

UE5仿漫威争锋灵蝶冲刺技能

这两天玩了一下漫威争锋Marvel Rivals&#xff0c;发现是UE5做的&#xff0c;对里面一些角色技能挺感兴趣的&#xff0c;想简单复刻一下技能功能&#xff0c;顺便复习一下学过的知识 首先把摄像机设置调整一下 CameraBoom里搜索lag 把摄像机延迟关掉 &#xff0c;这样摄像机就…

尼伽OLED赋能中国移动,打造移动AI数字人透明显示屏

随着人工智能和显示技术的不断进步&#xff0c;中国移动紧跟科技潮流&#xff0c;将移动AI数字人技术与透明屏完美结合&#xff0c;为用户带来了前所未有的智能交互体验。基于中国移动九天大模型生成的数字人小天&#xff0c;便是这一创新技术的典型代表。它不仅能够实现定点播…

goview——vue3+vite——数据大屏配置系统

低代码数据大屏配置系统&#xff1a; 数据来源是可以动态api配置的&#xff1a; 配置上面的api接口后&#xff0c;在数据过滤中进行数据格式的转化。 以上内容&#xff0c;来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下&#xff0c;需要更改…