数组——032把数组排成最小的数

博客围绕输入正整数数组,将数组数字拼接成最小数的问题展开。先把整型数组转成String数组,通过自定制排序规则对String数组排序,规则是比较两数拼接后的大小,最后拼接排序好的字符串数组得出结果,并给出了源码。

1,问题描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

2,解题思路

  • 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。
  • 排序规则如下:
    • 若ab > ba 则 a > b,
    • 若ab < ba 则 a < b,
    • 若ab = ba 则 a = b;
  • 解释说明:比如 “3” < "31"但是 “331” > “313”,所以要将二者拼接起来进行比较。

3,源码

import java.util.Arrays;
import java.util.Comparator;
public class Solution {
	public static String PrintMinNumber(int [] numbers) {
		if(numbers == null || numbers.length == 0) return "";
		//整数数组转字符串数组
		int n = numbers.length;
		String[] str = new String[n];
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<n;i++) {
			str[i] = String.valueOf(numbers[i]);
		}
		
		//制定排序规则
		Arrays.sort(str, new Comparator<String>() {
			@Override
			public int compare(String s1, String s2) {
				String c1 = s1+s2;
				String c2 = s2+s1;
				return c1.compareTo(c2);
			}
			
		});
		
		for(String s : str) {
			sb.append(s);
		}
		
		return sb.toString();
	}
}

注:方法转自牛客网

据集通过合成方式模拟了多种发动机在运行过程中的传感器监测据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:据类型为日期时间,记录了每个据点的采集时刻。序列起始于2024年12月24日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点形式记录发动机的温度读。其值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点表示发动机曲轴的旋转速度。该参在1000至4000转/分钟的范围内随机生成,符合多发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点表征发动机输出的旋转力矩,值区间为50至200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### 数组字的排序算法及实现 #### 快速排序 (Quick Sort) 快速排序是一种基于分治法的高效排序算法。其核心思想是通过选定一个基准(pivot),将数组分为两部分:一部分包含小于基准的元素,另一部分包含大于或等于基准的元素。接着递归地对这两部分分别进行相同的操作,直至整个数组有序。 以下是 C 语言实现快速排序的一个例子: ```c void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = (low - 1); for (int j = low; j <= high - 1; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return (i + 1); } void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } ``` 此代码实现了快速排序的核心逻辑[^1]。 --- #### 冒泡排序 (Bubble Sort) 冒泡排序是一种简单的排序方法,它重复遍历待排序列表,比较相邻两个元素并交换它们的位置,使得较大的元素逐渐向右移动至最终位置。该过程会不断重复,直到无需再做任何交换为止。 下面是 Python 实现冒泡排序的例子: ```python def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True if not swapped: break ``` 尽管冒泡排序易于理解,但在实际应用中由于时间复杂度较高而较少被使用[^2]。 --- #### 插入排序 (Insertion Sort) 插入排序的工作原理类似于人们整理扑克牌的过程——每次从未排序的部分取出一张卡片,并将其放置于已排序区域内的适当位置。这种方法对于小型据集非常有效。 下面是一个 Java 版本的插入排序实现: ```java public void insertionSort(int[] array){ for (int i=1;i<array.length;i++){ int key=array[i]; int j=i-1; while(j>=0 && array[j]>key){ array[j+1]=array[j]; j=j-1; } array[j+1]=key; } } ``` 插入排序适合处理几乎已经排好序的小规模据集合[^3]。 --- #### 归并排序 (Merge Sort) 归并排序也是一种典型的分治策略的应用实例。它的基本思路是先将原始数组分割成若干子数组,这些子数组各自完成内部排序后再逐步合并起来形成整体有序的结果。 这里给出一段伪代码表示如何执行归并排序: ```plaintext function mergeSort(array A) if length(A) ≤ 1 then return A middle ← ⌊length(A)/2⌋ leftHalf ← mergeSort(subArray(A, start, middle)) rightHalf ← mergeSort(subArray(A, middle+1, end)) return merge(leftHalf, rightHalf) function merge(left, right) result ← empty list while both left and right are non-empty do remove the smaller of the first elements from either left or right, append it to result. append any remaining items from left or right onto result return result ``` 相比其他几种排序技术而言,归并排序具有稳定性和较好的最坏情况表现特点[^4]。 --- ### 总结 以上介绍了四种常见的用于数组字排序的经典算法及其简单实现形式。每种算法都有各自的适用场景以及优劣之处,在具体项目实践中可以根据需求选择合适的方案加以运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值