当前位置: 首页 > news >正文

华为OD机试E卷 ---最大值

一、题目描述

给定一组整数(非负),重排顺序后输出一个最大的整数。

二、示例1

用例1

输入

10 9

输出

910

说明:输出结果可能非常大,所以你需要返回一个 字符串只而不是整数。

三、输入描述

数字组合

四、输出描述

最大的整数

五、解题思路

  1. 字符串转换

    • 首先,将整数数组中的每个元素转换为字符串,以便进行字符串比较和拼接。
  2. 自定义排序

    • 使用自定义的比较器对字符串数组进行排序。比较规则是:对于任意两个字符串ab,比较a + bb + a的大小。
    • 如果a + b大于b + a,则a应该排在b前面,以形成更大的数字。
    • 反之,如果a + b小于b + a,则b应该排在a前面。
    • 如果两者相等,则保持相对顺序不变(或者可以根据具体实现选择任意一种顺序,因为不影响最终结果)。
  3. 处理特殊情况

    • 排序后,如果数组的第一个元素是"0",则需要检查数组中是否全部为"0"。
    • 如果全部为"0",则直接返回"0"。
    • 如果不是全部为"0",但由于某些数字(如0)的存在,在排序后可能导致结果不是以最大数字开头(尽管这种情况在题目给定的非负整数范围内不太可能,但作为一种健壮性考虑),仍然需要按照排序后的结果拼接。
    • 实际上,在题目给定的非负整数范围内,只要正确实现了自定义排序,就不会出现以非最大数字开头的情况。
  4. 拼接结果

    • 将排序后的字符串数组使用StringBuilder或简单的字符串拼接操作合并成一个结果字符串。
  5. 返回结果

    • 返回拼接后的结果字符串作为最终输出。

六、代码实现(python)

from functools import cmp_to_keydef largest_number(nums):# 自定义比较函数,用于确定两个数字拼接后的顺序def compare(x, y):# 将数字转换为字符串,并比较它们拼接后的结果xy = str(x) + str(y)yx = str(y) + str(x)# 根据拼接后的字符串比较大小if xy > yx:return -1  # x应该排在y前面elif xy < yx:return 1  # y应该排在x前面else:return 0  # x和y拼接后的结果相等# 将数字列表转换为字符串列表,以便排序nums_str = list(map(str, nums))# 使用自定义的比较函数对字符串列表进行排序nums_str.sort(key=cmp_to_key(compare))# 将排序后的字符串列表拼接成一个字符串result = ''.join(nums_str)# 处理特殊情况:如果结果字符串以'0'开头(且不是整个字符串都是'0'),则去掉前面的'0'# 如果结果字符串全是'0',则返回'0'if result[0] == '0':return '0'# 返回最终结果return resultdef main():# 从用户获取输入input_str = input("请输入一组数字,用逗号分隔: ").strip()# 将输入字符串转换为整数列表try:nums = list(map(int, input_str.split(',')))except ValueError:print("输入格式错误,请输入一组用逗号分隔的数字。")return# 调用 largest_number 函数并输出结果result = largest_number(nums)print("最大拼接数字:", result)# 确保 main 方法只在直接运行脚本时执行
if __name__ == "__main__":main()# 测试用例
# print(largest_number([10, 9]))  # 输出 "910"
# print(largest_number([3, 30, 34, 5, 9]))  # 输出 "9534330"
# print(largest_number([1, 2, 3, 4, 5, 6, 7, 8, 9]))  # 输出 "987654321"
# print(largest_number([0, 0]))  # 输出 "0"
# print(largest_number([0, 0, 1]))  # 输出 "100"

七、代码实现(java)

import java.util.Arrays;
import java.util.Comparator;public class LargestNumber {/*** 将一组整数重排顺序后输出一个最大的整数** @param nums 包含非负整数的数组* @return 由这些整数组成的最大数字的字符串表示*/public static String largestNumber(int[] nums) {// 将整数数组转换为字符串数组String[] numStrs = new String[nums.length];for (int i = 0; i < nums.length; i++) {numStrs[i] = String.valueOf(nums[i]);}// 自定义排序规则:比较两个字符串拼接的两种顺序,决定哪个顺序更大Arrays.sort(numStrs, new Comparator<String>() {@Overridepublic int compare(String a, String b) {String order1 = a + b;String order2 = b + a;return order2.compareTo(order1); // 降序排列}});// 如果排序后的第一个元素是"0",说明所有元素都是0,直接返回"0"if (numStrs[0].equals("0")) {return "0";}// 将排序后的字符串数组拼接成结果字符串StringBuilder largestNumber = new StringBuilder();for (String numStr : numStrs) {largestNumber.append(numStr);}return largestNumber.toString();}public static void main(String[] args) {int[] nums = {10, 9};System.out.println(largestNumber(nums)); // 输出: 910}
}

八、运行示例解析

测试用例
public static void main(String[] args) {int[] nums = {10, 9};System.out.println(largestNumber(nums)); // 输出: 910
}
解析步骤
  1. 初始化数组:

    • 输入数组nums{10, 9}
  2. 转换为字符串数组:

    • 方法内部,首先将整数数组转换为字符串数组numStrs,得到{"10", "9"}
  3. 自定义排序:

    • 使用Arrays.sort方法和自定义的Comparator对字符串数组进行排序。
    • 比较规则是:将两个字符串ab分别进行拼接,形成a + bb + a,然后比较这两个拼接字符串的大小。
    • 在本例中,比较"10" + "9""9" + "10",即"109""910"
    • 由于"910"大于"109",因此自定义比较器会判定"9"应该排在"10"前面。
    • 排序后,numStrs变为{"9", "10"}(但实际上,由于我们的比较规则是降序排列以形成最大数,排序后的结果应该直接满足这个顺序,这里的描述是为了说明比较过程)。
  4. 处理特殊情况:

    • 检查排序后的数组的第一个元素是否为"0"。如果是,且数组中只包含零(虽然在这个特定例子中不是这种情况),则直接返回"0"
    • 在本例中,numStrs[0]"9",不是"0",因此不需要特殊处理。
  5. 拼接结果字符串:

    • 使用StringBuilder将排序后的字符串数组拼接成一个结果字符串。
    • 在本例中,拼接后的结果是"910"
  6. 返回结果:

    • 方法返回拼接后的结果字符串"910"
  7. 打印输出:

    • main方法中,打印调用largestNumber(nums)的返回值,输出为"910"

九、注意事项

  • 在自定义排序中,比较器返回的是order2.compareTo(order1),这是因为我们想要实现的是降序排列以形成最大数。如果order2大于order1,则compare方法应该返回正数,表示b应该排在a前面(但在数组中实际上是a排在b的位置被交换到了后面,因为Arrays.sort默认是升序排序,我们通过返回负数的相反数来实现降序)。
  • 在处理特殊情况时,由于题目要求非负整数,因此如果排序后的第一个元素是"0",则可以直接返回"0",无需进一步检查数组中是否包含其他非零元素(因为如果有其他非零元素,它们会在排序过程中被正确地放在"0"的前面)。但作为一种健壮性考虑,上述代码仍然检查了排序后的第一个元素是否为"0",并相应地返回了结果。在实际应用中,这种检查可能是多余的,具体取决于题目的严格要求和输入数据的范围。

相关文章:

华为OD机试E卷 ---最大值

一、题目描述 给定一组整数(非负)&#xff0c;重排顺序后输出一个最大的整数。 二、示例1 用例1 输入 10 9输出 910说明:输出结果可能非常大&#xff0c;所以你需要返回一个 字符串只而不是整数。 三、输入描述 数字组合 四、输出描述 最大的整数 五、解题思路 字符…...

UllnnovationHub,一个开源的WPF控件库

目录 UllnnovationHub1.项目概述2.开发环境3.使用方法4.项目简介1.WPF原生控件1.Button2.GroupBox3.TabControl4.RadioButton5.SwitchButton6.TextBox7.PasswordBox8.CheckBox9.DateTimePicker10.Expander11.Card12.ListBox13.Treeview14.Combox15.Separator16.ListView17.Data…...

Fabric区块链网络搭建:保姆级图文详解

目录 前言1、项目环境部署1.1 基础开发环境1.2 网络部署 2、后台环境2.1、环境配置2.2、运行springboot项目 3、PC端3.1、安装依赖3.2、修改区块链网络连接地址3.3、启动项目 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加…...

Kubernetes (K8s) 权限管理指南

1. 引言 Kubernetes (K8s) 作为当今最流行的容器编排平台,其安全性至关重要。本指南旨在全面介绍 K8s 的权限管理机制,帮助具有一定基础的读者深入理解并掌握这一关键领域。 © ivwdcwso (ID: u012172506) 2. Kubernetes 安全模型概述 K8s 的安全模型主要包括三个阶段…...

IM聊天学习资源

文章目录 参考链接使用前端界面简单效果消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 websocket握手认证ChatKeyCheckHandlerNettyChatServerNettyChatInitializer 参考链接 zzhua/netty-chat-web - 包括前后端 vue.js实现带表情评论功能前后端实现&#xff08;仿…...

计算机视觉模型的未来:视觉语言模型

一、视觉语言模型 人工智能已经从识别数据中的简单模式跃升为理解复杂的多模态数据。该领域的发展之一是视觉语言模型 (VLM) 的兴起。这类模型将视觉和文本之间联系起来,改变了我们理解视觉数据并与之交互的方式。随着 VLM 的不断发展,它们正在为计算机视觉设定一个新的水平…...

【JAVA 基础 第(19)课】Hashtable 类用法和注意细节,是Map接口的实现类

Map接口&#xff1a;存放的是具有映射关系的键值对&#xff0c;键映射到值&#xff0c;键必须是唯一的 Hashtable 类&#xff0c;Map接口的实现类,键和值都不能为nullHashtable 是同步的&#xff0c;是线程安全的 public class MapTest {public static void main(String[] arg…...

浅谈 JVM

JVM 内存划分 JVM 内存划分为 四个区域&#xff0c;分别为 程序计数器、元数据区、栈、堆 程序计数器是记录当前指令执行到哪个地址 元数据区存储存储的是当前类加载好的数据&#xff0c;包括常量池和类对象的信息&#xff0c;.java 编译之后产生 .class 文件&#xff0c;运…...

html的iframe页面给帆软BI发送消息

需求&#xff1a;帆软的网页组件嵌套一个HTML页面&#xff0c;HTML页面要给帆软发消息。 解决方法是&#xff1a;fineReportWindow.duchamp.getWidgetByName("txt1").setValue(666); <!DOCTYPE html> <html lang"en"> <head> <…...

spark任务优化参数整理

以下参数中有sql字眼的一般只有spark-sql模块生效&#xff0c;如果你看过spark的源码&#xff0c;你会发现sql模块是在core模块上硬生生干了一层&#xff0c;所以反过来spark-sql可以复用core模块的配置&#xff0c;例外的时候会另行说明&#xff0c;此外由于总结这些参数是在不…...

C++ 模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

生产环境中常用的设计模式

生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口&#xff0c;让子类决定实例化哪个类- 各种工厂类&#xff08;如视频游戏工厂模式创…...

基于SpringBoot+Vue的药品管理系统【源码+文档+部署讲解】

系统介绍 基于SpringBootVue实现的药品管理系统采用前后端分离的架构方式&#xff0c;系统实现了用户登录、数据中心、药库管理、药房管理、物资管理、挂号管理、系统管理、基础设置等功能模块。 技术选型 开发工具&#xff1a;idea2020.3Webstorm2020.3 运行环境&#xff…...

【CompletableFuture实战】

CompletableFuture实战 前言 前言 过去的一年&#xff0c;匆匆忙忙&#xff0c;换了一次工作&#xff0c;写博客的习惯就落下了&#xff0c;总之&#xff0c;有点懈怠。希望今年能重拾信心&#xff0c;步入正规&#xff01; CompletableFuture的用法网上资料颇多&#xff0c;…...

Redis 缓存穿透、击穿、雪崩 的区别与解决方案

前言 Redis 是一个高性能的键值数据库&#xff0c;广泛应用于缓存、会话存储、实时数据分析等场景。然而&#xff0c;在高并发的环境下&#xff0c;Redis 缓存可能会遇到 缓存击穿、缓存穿透 和 缓存雪崩 这三大问题。这些问题不仅影响系统的稳定性和性能&#xff0c;还经常出…...

Python自动化测试中定位隐藏菜单元素的策略

大家都读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 在进行Python自动化测试时&#xff0c;尤其是使用Selenium等工具对Web应用进行测试时&#xff0c;可能会遇到某些元素被隐藏的问题。这使得元素定位和交互变得复杂。然而&#xff0c;通过一些技术手段…...

【张雪峰高考志愿填报】合集

【张雪峰高考志愿填报】合集 链接&#xff1a;https://pan.quark.cn/s/89a2d88fa807 高考结束&#xff0c;分数即将揭晓&#xff0c;志愿填报的关键时刻近在眼前&#xff01;同学们&#xff0c;这可是人生的重要转折点&#xff0c;选对志愿&#xff0c;就像为未来铺就一条…...

53,【3】BUUCTF WEB october 2019 Twice SQLinjection

题目得到信息&#xff0c;2次注入&#xff0c;进入靶场 登录页面&#xff0c;很自然想到SQL 第一次注入应该是这个可以登录&#xff0c;注册&#xff0c;提交简介的页面 第二次注入应该是在info处注入&#xff0c;信息显示在简介处 我真的纯脑子有病&#xff0c;人家二次注入不…...

【Linux系统】分区挂载

我们能够根据一个 inode 号在指定分区寻找目标文件的 struct inode&#xff0c;也能根据目录文件的内容&#xff0c;通过映射关系&#xff0c;找指定的 inode&#xff0c;可是&#xff0c;现在有个问题&#xff1a; 问题&#xff1a;inode 是不能跨分区使用的&#xff01;Linu…...

Oracle 可观测最佳实践

简介 Oracle 数据库是一种广泛使用的商业关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由甲骨文公司&#xff08;Oracle Corporation&#xff09;开发。它支持 SQL 语言&#xff0c;能够存储和管理大量数据&#xff0c;并提供高级数据管理功能&#xff0c;如数…...

别再瞎装了!用NVIDIA-SMI一键查CUDA版本,保姆级PyTorch 2.6.0安装避坑指南

深度学习环境搭建实战&#xff1a;从CUDA版本诊断到PyTorch 2.6.0完美安装 刚接触深度学习的新手最常遇到的"入门杀"问题&#xff0c;往往不是模型调参或代码编写&#xff0c;而是环境搭建这个看似简单的环节。我见过太多人在安装PyTorch时直接复制粘贴网上的pip命令…...

OpenClaw量化对比:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF不同精度版本的自动化任务表现

OpenClaw量化对比&#xff1a;Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF不同精度版本的自动化任务表现 1. 测试背景与实验设计 去年在开发一个自动化文档处理流程时&#xff0c;我发现OpenClaw的任务成功率与底层模型量化精度密切相关。当时使用Q8版本处理Excel文…...

Delphi 终极实战:将自定义控件打包成 BPL,安装到 Delphi 工具栏(组件库实战)

前面我们手写了专属 UI 组件库&#xff08;MyUIClass.pas&#xff09;&#xff0c;但如果你想在以后的项目中一键调用这些控件&#xff0c;而不是每次都复制粘贴代码&#xff0c;那就必须将它们打包成 Delphi 组件包&#xff08;BPL 文件&#xff09;。学会这篇&#xff0c;你将…...

Dual-Tree Agent RAG:可控、可解释、可验证

从文本检索到方法推理的跃迁 传统RAG系统将文档切分为平面文本块&#xff0c;通过向量相似度检索来增强大模型生成。这种模式在简单事实问答中表现良好&#xff0c;却难以应对需要全局结构理解、跨章节整合和方法论复用的复杂创新任务。现有改进方案如RAPTOR&#xff08;层次摘…...

从YAML到PyTorch模型:拆解Ultralytics YOLO V8/V11中`parse_model`函数的完整工作流

从YAML到PyTorch模型&#xff1a;拆解Ultralytics YOLO V8/V11中parse_model函数的完整工作流 在计算机视觉领域&#xff0c;YOLO系列模型因其卓越的实时检测性能而广受开发者青睐。Ultralytics团队推出的YOLO V8/V11版本不仅延续了这一优势&#xff0c;更通过精心设计的配置文…...

AI持续爆火,相关岗位薪资到底达到了多少,AI大模型岗位薪资真相:多少年包能拿到?普通人如何破局?

“AI相关岗位薪资” 随着AI持续火爆&#xff0c;各大厂也都在招聘相关人才&#xff0c;近日OfferShow专门对AI相关岗位的工资情况进行了一期专题汇总&#xff0c;都是校招岗位年包90W左右年包100W年包80w70W50W左右40W左右54W左右34W左右。 看大家投票可信度还是挺高的&#xf…...

Python实战:从零构建基于腾讯混元大模型的智能客服系统

1. 为什么选择腾讯混元大模型做智能客服 最近两年大模型技术突飞猛进&#xff0c;但真正要把大模型落地到实际业务中&#xff0c;很多开发者都会遇到三个头疼的问题&#xff1a;第一是模型效果不稳定&#xff0c;第二是API调用复杂&#xff0c;第三是业务逻辑难集成。我在帮几…...

STM32F103C8T6 DHT11温湿度监测系统 HAL库 CubeMX实战(避坑指南)

1. 项目背景与硬件选型 温湿度监测是物联网领域最基础也最实用的功能之一。我最近用STM32F103C8T6和DHT11搭建了一个环境监测节点&#xff0c;整个过程踩了不少坑&#xff0c;也积累了一些实战经验。这个方案特别适合需要低成本、快速上手的场景&#xff0c;比如智能家居、农业…...

嵌入式通信协议SPI/I2C/UART原理与应用

嵌入式通信协议原理图解与技术解析1. 串行通信协议基础1.1 SPI通信协议SPI(Serial Peripheral Interface)是一种全双工、同步串行通信协议&#xff0c;采用主从架构设计。其核心特点包括&#xff1a;四线制结构&#xff1a;SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、SS(片选…...

如何安全提取Chrome浏览器密码:3种实用方法完全指南

如何安全提取Chrome浏览器密码&#xff1a;3种实用方法完全指南 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 在数字生活中&#xff0c;你是否遇到过忘记网站密码的困扰&…...