把数组排成最大的数

本文介绍了一种将数组中所有数字拼接成最大可能数值的算法。通过将整型数组转换为String数组并自定义排序规则,实现了数字的最优拼接。文章提供了完整的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天做到这个题,当时蒙住了,只想着按位比较,把拼接比较给忘了,现在想了一下发现自己那时候好蠢,记录一下

 

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最大的一个

思路:将整型数组转换成String数组,然后将String数组排序,把m和n拼接成的mn和nm按照字符串大小的比较规则来处理即可,如果mn < nm,应该打印出nm,即n应该排在m前面,反之,m应该排在n前面。最后将排好序的字符串数组拼接出来。

import java.util.Arrays;
import java.util.Comparator;

public class Solution {
	public static void main(String[] args) {
		int[] arr = {3,32,321};
		System.out.println(printMaxNumber(arr));
		
	}
	public static String printMaxNumber(int[] arr){
		if(arr == null || arr.length == 0){
			return "";
		}
		String[] str = new String[arr.length];
		for(int i = 0; i< arr.length;i++){
			str[i] = String.valueOf(arr[i]);
		}
		Arrays.sort(str, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				String s1 = o1 + o2;
				String s2 = o2 + o1;
				return -s1.compareTo(s2);
			}
		});
		StringBuffer sb = new StringBuffer();
		for(int i = 0; i < arr.length; i++){
	        sb.append(str[i]);
	    }
		return sb.toString();
	}
}

 

### 对数组进行降序排列 对于不同编程语言,可以采用特定的方式对数组执行降序排序。 #### JavaScript 实现 在 JavaScript 中,`sort()` 方法可用于对数组元素进行原地排序。为了实现降序排序,需向 `sort()` 提供一个比较函 `(a, b) => b - a` 。此函定义了当两个元素相等时保持原有顺序;如果前者应位于后者之后,则返回正值[^2]。 ```javascript let arr = [1, 3, 4, 6, 5, 2]; arr.sort((a, b) => { return b - a; }); console.log(arr); ``` 这段代码会输出 `[6, 5, 4, 3, 2, 1]` ,即原始数组值大小进行了逆序重排。 #### Python 实现 Python 内置的 `sorted()` 函以及列表对象自身的 `sort()` 方法都支持通过指定关键字参 `reverse=True` 来完成降序操作: ```python numbers = [1, 3, 4, 6, 5, 2] sorted_numbers_descending = sorted(numbers, reverse=True) print(sorted_numbers_descending) # 或者直接调用列表的 sort() 方法 numbers.sort(reverse=True) print(numbers) ``` 两种方式都将打印出相同的有序序列:`[6, 5, 4, 3, 2, 1]`. #### Java 实现 针对 Java 编程环境下的整类型 (`int`) 数组,可借助 Arrays 类提供的静态方法 `Arrays.sort()` 结合自定义 Comparator 接口来达成目标。不过更简便的做法是先将基本类型的数组转换成包装类 Integer[] 形式的数组再利用其内置特性处理[^4]. ```java import java.util.Arrays; public class Main { public static void main(String[] args){ int[] nums = {1, 3, 4, 6, 5, 2}; Arrays.sort(nums); // 先升序排序 // 手动反转已排序好的数组得到最终结果 for (int i=0,j=nums.length-1;i<j;i++,j--){ int temp = nums[i]; nums[i]=nums[j]; nums[j]=temp; } System.out.println(Arrays.toString(nums)); } } ``` 上述实例展示了如何通过对数组先做一次自然升序排序后再交换位置的方式来间接获得降序效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值