数组组成的最小数字 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

给定一个整型数组,请从该数组中选择3个元素组成最小数字并输出(如果数组长度小于3,则选择数组中所有元素来组成最小数字)。

输入描述

一行用半角逗号分割的字符串记录的整型数组,0<数组长度<=100,0<整数的取值范围<=10000。

输出描述

由3个元素组成的最小数字,如果数组长度小于3,则选择数组中所有元素来组成最小数字。

示例1

输入:
21,30,62,5,31输出:
21305说明:
数组长度超过3,需要选3个元素组成最小数字,21305由21,30,5三个元素组成的数字,为所有组合中最小的数字

示例2

输入:
5,21输出:
215说明:
数组长度小于3,选择所有元素来主城最小值,215为最小值。

题解

题目类型

该题属于贪心算法的应用,因为我们需要在给定的条件下,组合数字,使得最终结果最小。通过排列组合元素并比较组合后的结果大小,我们可以找到符合要求的最小数。

解题思路

题目要求从数组中选择3个元素,组成最小的数字,并且如果数组长度小于3,则直接将所有元素组成最小的数字。解题的核心在于如何组合这3个数字使得结果最小。可以通过全排列来生成所有可能的组合,然后找到最小的一个。具体解题步骤如下:

  1. 数组长度判断
    • 如果数组长度为1,直接输出该元素。
    • 如果数组长度为2,计算两种不同的组合,取最小值。
    • 如果数组长度大于等于3,进行全排列组合,找到由3个元素组成的最小数字。
  2. 排列组合:当数组长度大于等于3时,可以通过遍历所有3个元素的排列,依次生成这些排列所形成的数,并记录最小的数值。
  3. 贪心策略:为了使得最终的数最小,我们需要比较不同的排列所形成的数字,选择其中最小的一个。这就是典型的贪心算法思想:每一步都选择局部最优的排列。

代码大致描述

无论是哪种语言实现,整体思路大致相同:

  1. 输入解析:将输入的字符串按逗号分割成一个数组。
  2. 特殊情况处理:如果数组长度小于3,直接返回组合后的最小值。
  3. 全排列查找最小值:遍历数组,选择三个不同的元素,生成所有可能的数字组合,最后返回最小的数字。
  4. 输出结果:打印最小的组合数。

时间复杂度

  • 时间复杂度
    • 如果数组长度为n,当n≥3时,生成三个元素的所有组合所需时间复杂度为O(n^3)。
    • 数组中每次组合后的字符串拼接操作为常数时间,比较字符串形成的整数也为常数时间。
  • 空间复杂度:由于只使用了几个变量来存储最小值和临时组合,空间复杂度为O(1),输入数组的存储空间不计算在内。

Java

import java.util.Scanner;
/*** @author code5bug*/
public class Main {public static void main(String[] args) throws Exception {Scanner in = new Scanner(System.in);String[] arr = in.nextLine().split(",");int n = arr.length; // 获取输入的长度// 只有一个元素时,直接输出if (n == 1) {System.out.println(arr[0]);return;}// 如果有两个元素,则比较两种组合,输出最小值if (n == 2) {String s1 = arr[0], s2 = arr[1];System.out.println(Math.min(Long.parseLong(s1 + s2), Long.parseLong(s2 + s1)));return;}// 三个元素的全排列组合,找到最小值long result = Long.MAX_VALUE;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i == j) continue;for (int k = 0; k < n; k++) {if (i == k || j == k) continue;// 将三个数字组合成一个字符串,再转化为 long 值进行比较String s = arr[i] + arr[j] + arr[k];result = Math.min(result, Long.parseLong(s));}}}// 输出最终的最小值结果System.out.println(result);}
}

Python

def solve():# 从标准输入读取数据arr = input().split(",")n = len(arr)# 只有一个元素时,直接输出if n == 1:print(arr[0])# 如果有两个元素,则比较两种组合,输出最小值elif n == 2:s1, s2 = arr[0], arr[1]print(min(int(s1 + s2), int(s2 + s1)))else:# 三个元素的全排列组合,找到最小值result = float('inf')  # 设置初始值为无穷大for i in range(n):for j in range(n):if i == j:continuefor k in range(n):if i == k or j == k:continue# 将三个数字组合成一个字符串,再转化为整数进行比较s = arr[i] + arr[j] + arr[k]result = min(result, int(s))# 输出最终的最小值结果print(result)if __name__ == "__main__":solve()

C++

#include <iostream>
#include <string>
#include <vector>using namespace std;int main() {vector<int> arr;int num;while (cin >> num) {arr.push_back(num);if (cin.peek() == '\n') break;cin.ignore();}int n = arr.size();// 只有一个元素时if (n == 1) {cout << arr[0] << endl;return 0;}// 两个元素组成数字if (n == 2) {string s1 = to_string(arr[0]), s2 = to_string(arr[1]);cout << min(stoll(s1 + s2), stoll(s2 + s1)) << endl;return 0;}long long result = LONG_LONG_MAX;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i == j) continue;for (int k = 0; k < n; k++) {if (i == k || j == k) continue;// 三个元素组成数字string s = to_string(arr[i]) + to_string(arr[j]) + to_string(arr[k]);result = min(result, stoll(s));}}}cout << result << endl;return 0;
}

相关练习题

题号题目难易
LeetCode 179179. 最大数中等
LeetCode 321321. 拼接最大数困难

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

2024年陕西省安全员B证证模拟考试题库及陕西省安全员B证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年陕西省安全员B证证模拟考试题库及陕西省安全员B证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;陕西省安全员B证证模拟考试题库是根据陕西省安全员B证最新版教材&#xff0c;陕西省安全员B证大纲整理…

中国可观测日「成都站」圆满落幕

在数字化转型的大潮中&#xff0c;企业对于系统的稳定性和可靠性提出了更高的要求&#xff0c;而可观测性平台正是确保业务连续性的关键技术。9月20日&#xff0c;中国可观测日成都站的活动圆满落幕&#xff0c;为技术专家们提供了一个宝贵的平台&#xff0c;深入探讨了可观测性…

【BetterBench博士】2024年华为杯E题:高速公路应急车道紧急启用模型 Python代码实现

题目 【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 E题&#xff1a;高速公路应急车道紧急启用模型 问题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 C题&#xff1a;数据驱动…

【Transformers基础入门篇4】基础组件之Model

文章目录 一、Model简介1.1 Transformer1.2 注意力机制1.3 模型类型 二、Model Head2.1 什么是 Model Head2.2 Transformers中的Model Head 三、Model基本使用方法3.0 模型下载-浏览器下载3.1 模型加载与保存3.2 配置加载参数3.3 加载config文件3.2 模型调用3.2.1 带ModelHead的…

*C++:string

一.STL简介 1.STL STL(standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 。 2.STL六大组件 二.标准库里的string类 标准string库网址&#xff1…

朴世龙团队《Global Change Biology 》研究成果!揭示生物累积效应对秋季叶片衰老的重要调节作用!

本文首发于“生态学者”微信公众号&#xff01; 在全球气候变化的背景下&#xff0c;生态系统的季节性变化&#xff0c;尤其是植物的春季叶片展开和秋季叶片衰老&#xff08;EOS&#xff09;&#xff0c;对碳循环和区域气候调节起着至关重要的作用。然而&#xff0c;关于秋季叶…

腾讯云点播及声音上传

文章目录 1、开通腾讯云点播2、获取腾讯云API密钥3、完成声音上传3.1、引入依赖3.2、参考&#xff1a;接入点地域3.3、参考&#xff1a;任务流设置3.4、首先修改配置&#xff1a;3.4.1、 3.5、TrackInfoApiController --》 uploadTrack()3.6、VodServiceImpl --》 uploadTrack(…

计算存款利息-C语言

1.问题&#xff1a; 假设有本金1000元&#xff0c;想存一年&#xff0c;有三种方法可选择&#xff1a; A活期&#xff0c;年利率为0.0036&#xff1b; B一年期定期&#xff0c;年利率为0.0225&#xff1b; C存两次半年定期&#xff0c;年利率为0.0198。 请分别计算出一年后…

帮13岁小孩哥2分钟完成开发,这位AI程序员究竟是何方神圣?

通义灵码再升级&#xff0c;真AI程序员来了 随着通义系列基础模型能力的全面提升&#xff0c;各个具体领域的应用模型也随之飞升。这次在云栖大会上迎来重磅升级的&#xff0c;就包括用于代码生成的通义灵码。 一年前的通义灵码还只能完成基础的辅助编程任务&#xff0c;很难…

加快软件项目开发进度的6大技巧

加快软件项目的开发进度对于项目的成功与市场竞争力的提升至关重要。此举能够迅速响应市场变化&#xff0c;抢占市场先机&#xff0c;增强竞争力&#xff0c;同时降低开发成本&#xff0c;提升用户满意度。因此&#xff0c;加速开发是确保项目成功与市场竞争力的核心要素。若未…

捷途旅行者8月燃油SUV销量夺冠,遥遥领先!

2023年9月&#xff0c;捷途旅行者这款国内首款旅行越野SUV&#xff0c;如同一匹黑马般闯入国内汽车市场&#xff0c;凭借其方正硬朗的造型与13.99万元的亲民起售价&#xff0c;迅速点燃了消费者的购车热情。时隔一年&#xff0c;这款车的魅力依旧不减&#xff0c;2024年8月的销…

利用Leaflet.js集成强大的船舶管理页面:集成标记/路线/区域绘制和动态显隐功能

引言 在船舶管理领域&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术的应用日益广泛。通过GIS技术&#xff0c;管理人员可以实时监控船舶的位置、航线以及与其他重要地理位置的关系。Leaflet.js作为一个轻量级但功能强大的前端地图框架&#xff0c;使得在Web页面上集…

如何用AI论文生成工具撰写一篇高质量的成人教育毕业论文

撰写一篇高质量的成人教育毕业论文并不简单&#xff0c;它有一定的步骤和策略。锐智AI今天就总结了一些关键的步骤&#xff0c;希望对即将毕业的你顺利完成论文写作&#xff1a; 介绍之前简单说下锐智AI&#xff0c;它是一款集论文大纲生成、内容填充、文献引用、查重修改于一…

Microsoft Edge WebView2运行时安装包获取

目前越来越多的软件将WebView2当做运行时&#xff0c;发现一些精简版的系统精简掉了WebView2或者人为误删除&#xff0c;一些软件无法正常运行&#xff0c;我们可以重新安装即可 浏览器访问WebView2官方页面 https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/ …

头戴式耳机百元以内都有哪些推荐?头戴式耳机百元测评推荐

今天跟大家聊一聊头戴式耳机&#xff0c;无论是沉浸在游戏的世界中&#xff0c;还是专注于观看视频课程汲取知识&#xff0c;它都能为我们带来清晰、震撼的音质体验。对程序员来说&#xff0c;在嘈杂的工作环境中&#xff08;比如机房里&#xff09;&#xff0c;它的降噪功能显…

CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞&#xff0c;攻击者可利用此漏洞执行任意代码。 影响版本 v6.1.3 < thinkphp < v8.0.4 环境搭建 环境&#xff1a;php8.0.2thinkphp8.0.4memcached3.2.0 首先搭建 thinkphp 环境&#xff1a;thinkPHP 8.0.4 安装_thin…

02 BlockChain-- ETH

以太坊与比特币有什么不同&#xff1f; 以太坊立足比特币创新之上&#xff0c;于 2015 年启动&#xff0c;两者之间有一些显著不同。 从宏观的方面&#xff1a; 比特币就仅仅是比特币&#xff1b;以太坊&#xff08;Ethereum&#xff09;包括以太币&#xff08;Ether&#x…

Python可迭代对象(2)

目录 3。字典 字典的构造 字典的添加和修改 字典推导式的使用 以上全部代码编译结果展示 字典复习 4。集合(set) 集合的创建 集合的运算 集合的添加和删除元素 以上全部代码的编译结果 序列解包&#xff08;Sequence unpacking&#xff09; 3。字典 字典的构造 #字…

【第十六章:Sentosa_DSML社区版-机器学习之生存分析】

【第十六章&#xff1a;Sentosa_DSML社区版-机器学习之生存分析】 16.1 加速失效时间回归 1.算子介绍 加速失效时间回归模型Accelerated failure time (AFT)是一个监督型参数化的回归模型&#xff0c;它可以处理删失数据。它描述了一个生存时间的对数模型&#xff0c;所以它通…

Pygame中Sprite实现逃亡游戏1

在《Pygame中Sprite类实现多帧动画》系列中&#xff0c;通过pygame中的sprite类&#xff08;精灵类&#xff09;实现了多帧动画。在该动画的基础上&#xff0c;可以来实现一个逃亡游戏&#xff0c;如图1所示。 图1 逃亡游戏效果 从图1中可以看出&#xff0c;玩家被飞龙追赶&am…