【leetcode】最大数

news/2024/12/30 2:20:05/

一、题目描述

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

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

示例 1:

输入:nums = [10,2]
输出:“210”

示例 2:

输入:nums = [3,30,34,5,9]
输出:“9534330”

二、代码思路

整体思路:本质上属于自定义排序比较规则,然后按照规则进行排序,最终组成结果值。

根据整体的思路,有三种方法定义排序规则。

  1. 设字符串 A 与 B,比较C1=A+B转成整形与C2=B+A转成整形两者谁大从而判断A与B的顺序。缺点就是整形会越界。
    (0 <= nums[i] <= 109)
  2. 与第一个思路类似,但是这次不需要转整形,而是遍历C1与C2字符串来逐个字符判断大小。
  3. 与2类似也是两个字符串比较,2是最简单的比较。

三、代码题解

public String largestNumber(int[] nums) {//考虑一种边界值,就是所有元素都是0String strs[] = new String[nums.length];int flag = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] != 0) {flag = 1;}strs[i] = nums[i] + "";}if (flag == 0) {return "0";}Arrays.sort(strs, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {if (compareStrs(o1, o2)) {return 1;} else {return -1;}}});//quickSort(nums, 0, nums.length - 1);StringBuffer stringBuffer = new StringBuffer();for (int i = strs.length - 1; i >= 0; i--) {stringBuffer.append(strs[i]);}return new String(stringBuffer);}//比较两个字符串谁比较大,但是会出现整形越界的情况public boolean compareStrs1(String str1, String str2) {int num1 = Integer.parseInt(str1 + str2);int num2 = Integer.parseInt(str2 + str1);return num1 >= num2 ? true : false;}//比较两个字符串谁比较大public boolean compareStrs(String str1, String str2) {String num1 = str1 + str2;String num2 = str2 + str1;int length = num1.length();for (int i = 0; i < length; i++) {if (num1.charAt(i) > num2.charAt(i)) {return true;} else if (num1.charAt(i) < num2.charAt(i)) {return false;} else {continue;}}return true;}

时间复杂度:O(n^2logn)
空间复杂度:O(n)


http://www.ppmy.cn/news/6849.html

相关文章

管理员权限功能和开机自启功能

前言 开机启动功能在Window下是很重要的一个功能&#xff0c;很多程序它都需要这样的功能 一.VS的配置选项&#xff08;以管理员权限启动程序&#xff09; 作用&#xff1a;用户在点击任务栏窗口等需要管理员权限时不会没有响应。 二.开机自启动&#xff08;注册表&#xff…

【Educoder作业】CC++文件实训

【Educoder作业】C&C文件实训 拖了很久了&#xff0c;主要是当时没有完全理解 整个文件实训和之前的区别就在于&#xff0c;处理问题的时候我们的数据是存到了文件里或者我们希望把输出放到文件里。所以只需要解决文件输入和文件输出的问题即可。四个关卡相当于不同的手段&…

用uniapp实现teb切换

1.html <view><!-- tab栏切换动态改变激活样式 --><view class"nav"><view class"nav-list" v-for"(item,index) in list" :key"item.id" tap"changeAct(item)"><!-- 激活样式名字是红色 判断a…

李宪磊老师:人力资源一定要懂得八条人力资源管理定律

李宪磊老师:人力资源一定要懂得八条人力资源管理定律 作为人力资源&#xff0c;在职场上一定要知道的八条人力资源管理定律&#xff0c;看看您能知道多少&#xff0c;懂得这些定律&#xff0c;可以轻松的做好人力资源的工作&#xff0c;接下来和老师一起来学习下吧。 李宪磊老师…

OpManager 实时网络监控

网络是全球企业背后的基础。它在为您的员工提供行政服务以及为各大洲的客户提供服务方面发挥着关键作用。网络可帮助您将信息保存在一个集中位置 - 需要和限制所有其他入站请求的人员可以访问。那么&#xff0c;您如何提供持续的一流最终用户体验并维护快速发展的网络呢&#x…

大数据学习

优化: 按不同维度切分 ########## hadoop ########## 删除job hadoop job -kill job_xxx 折半查找(有序查找) 数据统计(hive) 数据过滤 同类汇聚 全局排序 容错框架 常见应用 从日志中找到某一个条件(时间,用户)数据 除去非法数据,保留合法数据 数据格式整理 混合日志,按…

【LeetCode】C语言实现---用队列实现栈用栈实现队列

目录&#x1f449;用队列实现栈&#x1f449;用栈实现队列&#x1f449;用队列实现栈 入口&#xff1a;OJ 题目描述&#xff1a; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 em…

9.Linux文件管理命令---sort按顺序显示文件内容

9.Linux文件管理命令—sort按顺序显示文件内容 文章目录sort按顺序显示文件内容排序选项如下其他选项如下案例练习sort按顺序显示文件内容 作用&#xff1a;按顺序显示文件内容。 用法&#xff1a;sort [选项]…[文件]… 排序选项如下 命令描述-b,--ignore-leading-blanks忽…