算法的学习笔记—把数组排成最小的数(牛客JZ45)

news2024/11/16 7:23:52

img

😀前言
在编程面试中,经常会遇到需要将问题转化为排序问题的题目。这些问题看似复杂,但只要抓住核心思路,便能迅速解决。今天我们就来看一道这样的题目:如何将一个非负整数数组拼接成最小的数字

🏠个人主页:尘觉主页

文章目录

  • 🥰把数组排成最小的数
    • 题目链接
    • 🤔题目描述
      • 示例输入输出
    • 🥰解题思路
    • 💖实现代码
      • 代码详解
      • 复杂度分析
    • 😄总结

🥰把数组排成最小的数

题目链接

牛客网

🤔题目描述

给定一个非负整数数组 numbers,要求将数组里的所有数字拼接起来,形成一个新的数字,并返回其中最小的那个。例如:

  • 输入数组 [3, 32, 321],我们可以将这些数字拼接成 321323,这个数字是所有可能拼接结果中的最小值。
  1. 输出结果可能非常大,所以你需要返回一个字符串而不是整数

  2. 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

数据范围:

0<=len(numbers)<=100

示例输入输出

  • 输入:[11, 3]
    • 返回值:"113"
  • 输入:[]
    • 返回值:""(空字符串)
  • 输入:[3, 32, 321]
    • 返回值:"321323"

🥰解题思路

解决这个问题的关键在于如何定义两个数字在拼接时的优先级。直观地,我们需要比较两个数字 S1S2 在不同顺序下拼接的结果。

例如,对于两个数字 332

  • 如果 S1 = "3"S2 = "32",那么 S1+S2"332"S2+S1"323"。显然,"323" 更小,因此我们应该将 32 排在 3 前面。

通过这种比较方式,我们可以定义一个自定义的排序规则,接着使用 Java 中的 Arrays.sort 方法进行排序,最终得到最小的拼接结果。

💖实现代码

以下是用 Java 实现的代码:

import java.util.Arrays;

public class MinNumber {

    public String PrintMinNumber(int[] numbers) {
        // 判断输入是否为空或长度为0,如果是则返回空字符串
        if (numbers == null || numbers.length == 0)
            return "";

        int n = numbers.length;
        // 创建一个字符串数组,用于存储每个数字的字符串形式
        String[] nums = new String[n];
        for (int i = 0; i < n; i++) {
            // 将数字转换为字符串并存储到字符串数组中
            nums[i] = String.valueOf(numbers[i]);
        }

        // 使用自定义的排序规则对字符串数组进行排序
        // 排序规则:如果拼接结果 s1+s2 小于 s2+s1,则 s1 排在前面
        Arrays.sort(nums, (s1, s2) -> (s1 + s2).compareTo(s2 + s1));

        // 使用 StringBuilder 来拼接排序后的字符串数组
        StringBuilder ret = new StringBuilder();
        for (String str : nums) {
            ret.append(str);
        }

        // 返回拼接后的字符串结果
        // 注意:此处不需要去除可能存在的前导0,因为题目没有要求去除
        return ret.toString();
    }
}

代码详解

  1. 字符串数组初始化:首先,我们将整数数组 numbers 转换为字符串数组 nums,这是因为在后续操作中,我们需要比较字符串拼接的结果。
  2. 自定义排序规则:接着,我们利用 Arrays.sort 方法对字符串数组进行排序。排序时,比较的关键是拼接后的字符串 s1+s2s2+s1 的大小。如果 s1+s2 小于 s2+s1,那么 s1 应该排在 s2 前面。
  3. 拼接结果:排序完成后,将排序好的字符串数组拼接成一个字符串,并返回这个最终结果。

复杂度分析

  • 时间复杂度:排序算法的时间复杂度为 O(n log n),其中 n 是数组的长度。由于每次比较涉及字符串的拼接操作,因此整体的时间复杂度还会受到字符串长度的影响。
  • 空间复杂度:主要空间消耗在字符串数组 nums 上,空间复杂度为 O(n)

😄总结

通过这道题目,我们看到了如何将一个复杂的拼接问题转化为排序问题,并且掌握了一种自定义排序规则的方法。这种思想不仅仅适用于本题,很多涉及组合或排列的问题都可以通过类似的思路来解决。

这道题目在许多面试中都会出现,它不仅考察了候选人的编程能力,更测试了对排序算法的理解与应用能力。希望通过本文的讲解,你能够掌握这一重要的编程技巧,并在实际开发中灵活运用。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

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

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

相关文章

Cracking the Safe

原题链接&#xff1a;https://leetcode.cn/problems/cracking-the-safe/description/ 题目要求的是&#xff0c;某个时刻能够打开保险箱的任一最短密码序列&#xff0c;需要包含所有密码子串。 答案应当是一个字符串&#xff0c;任意长度为n的子串的都是一种密码方案。 对于有n…

探索前沿科技:在本地系统上安装和使用Style TTS2进行高质量语音合成

我们正处于一个令人激动的时代&#xff0c;有如此多的选择&#xff0c;不仅在大型语言模型方面&#xff0c;还有现在的文本到语音&#xff08;TTS&#xff09;模型。在这篇文章中&#xff0c;我将向您展示如何在本地系统上轻松安装这个非常出色的模型——Style TTS2&#xff0c…

联蔚盘云亮相CDIE消费品行业峰会

8月28日&#xff0c;由华昂集团主办&#xff0c;专注于消费品行业的2024CDIE行业峰会在广州盛大开幕。联蔚数科携子品牌联蔚盘云亮相本次大会。本次峰会汇聚了众多企业高管&#xff0c;行业领域专家&#xff0c;围绕AI技术前沿、数智营销新策略、会员运营以及品牌增量路径等话题…

2024如何开始进入美业?美业创业步骤分享|博弈美业系统管理系统源码

进入美业可以是一个令人兴奋且具有挑战性的决定。以下是一些步骤&#xff0c;希望可以帮助你在美业建立自己的职业生涯&#xff1a; 1.确定你的兴趣和专长&#xff1a; 首先要考虑你对美业的兴趣和擅长的领域&#xff0c;比如化妆、美发、美甲、美容护理等。确定自己的兴趣和优…

随笔八、LED-RGB灯程控测试

目录 1. 泰山派环境 2. 编程控制 1. 泰山派环境 泰山派开发板上有一颗RGB三色LED灯&#xff0c;烧写官方镜像上电后开始闪烁&#xff0c;表示系统已经正常运行。可以在设备树里修改初始状态。 查看电路图知道&#xff0c;RGB是通过GPIO1的B0~B2引脚控制的&#xff0c;低电平…

【吊打面试官系列-Redis面试题】Memcache 与 Redis 的区别都有哪些?

大家好&#xff0c;我是锋哥。今天分享关于 【Memcache 与 Redis 的区别都有哪些&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Memcache 与 Redis 的区别都有哪些&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1、存储方式 Memecach…

Java笔试面试题AI答之面向对象(9)

文章目录 49. 简述Java继承时&#xff0c;类的执行顺序是什么&#xff1f;一、类的静态成员初始化顺序二、对象的初始化顺序三、总结 50. 举例说明什么情况下会更倾向于使用抽象类而不是接口&#xff1f;1. 当需要定义和实现部分通用行为时2. 当需要访问修饰符或方法修饰符时3.…

07.整合Pinia

1. 前言 Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。更加契合 VUE3 组合式 API 和 TS 类型支持。想进一步了解&#xff0c;参考官网&#xff1a;https://pinia.vuejs.org/ 如果是使用官方脚手架搭建的工程&#xff0c;选择了 pinia 将会自动帮我…

Git之2.5版本重要特性及用法实例(五十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

Qt应用的高分辨率适配

背景 工作中需要面对触控大屏的4K分辨率场景&#xff0c;同时也有越来越多人开始使用高分屏&#xff0c;原来多基于1080p分辨率开发的Qt程序无法很好适配更高的分辨率。 没有特意针对高分辨率场景做适配时&#xff0c;Qt应用的表现通常有两种情况&#xff1a; 分辨率高的情况…

六西格玛管理培训公司 谈 故障树分析(Fault Tree Analysis)

故障树分析&#xff08;Fault Tree Analysis, FTA&#xff09;&#xff1a;一种自顶向下的演绎故障分析工具&#xff0c;其中使用布尔逻辑将一系列较低级别的事件组合起来&#xff0c;用以分析系统的非期望状态。那么&#xff0c;如何使用故障树分析&#xff08;FTA&#xff09…

集成电路学习:什么是CRC循环冗余校验

一、CRC&#xff1a;循环冗余校验 CRC&#xff08;Cyclic Redundancy Check&#xff09;&#xff0c;即循环冗余校验&#xff0c;是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的快速算法。它主要用于检测或校验数据传输或保存后可能出现的错误。CRC利用除法及…

[Labview] 表格改值后单元格编辑功能,更改颜色、字体、颜色等

效果如下所示&#xff1a; 例子中演示了单元格变色&#xff0c;具体需要什么修改&#xff0c;在相同的位置进行操作即可。 检测到[鼠标释放]事件&#xff0c;则记录被选中的单元格。 使用[鼠标按下]事件也可以&#xff0c;不过我个人测试下来&#xff0c;[按下]的判断精准度不…

智能候诊系统 项目源码25287

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

万亿低空经济:无人机飞手考证正当时

随着低空经济的不断发展和国家政策的持续推动&#xff0c;无人机行业正迎来前所未有的发展机遇。低空经济作为一种新兴的综合性经济形态&#xff0c;依托低空空域&#xff0c;通过各类有人驾驶和无人驾驶航空器的低空飞行活动&#xff0c;辐射带动相关领域融合发展。这一领域涉…

视频结构化从入门到精通——GPU主要硬件平台介绍

视频结构化主要硬件平台 1. 深度学习中“硬”和“软”的概念 在深度学习中&#xff0c;“硬”和“软”通常用于描述不同的处理方法或策略&#xff0c;尤其是在解码、编码、推理等任务中。它们反映了算法在处理信息时的确定性和灵活性。 软&#xff08;Soft&#xff09; 处理…

电子检测报告如何盖骑缝章?

电子检测报告如何盖骑缝章&#xff1f;使用e章宝&#xff08;易友EU3000智能盖章软件&#xff09;给电子检测报告盖骑缝章&#xff0c;可以遵循以下步骤进行&#xff1a; 一、准备工作 确保e章宝软件已安装&#xff1a; 在计算机上安装e章宝&#xff08;易友EU3000智能盖章软件…

小程序页面跳转传url参数被截取问题

跳转时处理 const params {url:hhtp://www.baidu.com?a1}const queryString Object.keys(params).map(key > ${encodeURIComponent(key)}${encodeURIComponent(params[key])}).join(&);wx.navigateTo({url: ../../toPageView/toPageView?${queryString},})webview页…

推荐Windows11中帮助提高远程工作效率的6个最佳工具

序言 由于我们中的许多人都在远程工作,Windows 11附带了一些内置的焦点工具来帮助我们完成工作也就不足为奇了。但是,Windows 11究竟为我们这些想要确保我们真正完成工作的专业人士提供了什么?让我们来看看。 专注期和生产力 Windows 11取消了任务栏上的焦点模式,代之以…

李林880重点题推荐

考研倒计时113天&#xff0c;九月份即将来临&#xff0c;目前大家都处在强化阶段的学习中。虽然每个人的复习进度有所不同&#xff0c;但无论进展如何&#xff0c;我们都要保持良好的心态。进度快的同学要继续稳扎稳打&#xff0c;而进度稍慢的同学也不要焦虑&#xff0c;保持专…