剑指offer 33. 把数组排成最小的数

xiaoxiao2021-02-27  153

//题目:输入一个数组,输出这个数组排列的最小数 //将数组按照新的排序方式使用快排进行排序,之后直接顺序打印即可 public class Main { public static void main(String[] args) throws Exception { System.out.println(getMaxSeq(new int[]{9})); } public static int getMaxSeq(int[] input){ if(input == null || input.length == 0){ return -1; } int low = 0; int high = input.length-1; sort(input,low,high); String result = ""; for(int i = 0;i<input.length;i++){ result = result+input[i]; } return Integer.parseInt(result); } public static void sort(int[] input,int low, int high){ //将数组按照新的排序方式使用快排进行排序,之后直接顺序打印即可 if(low<high){ int mid = partition(input,low,high); sort(input,low,mid-1); sort(input,mid+1,high); } } public static int partition(int[] input,int low, int high){ int temp = input[low]; while(low<high){ while(low<high && isBigger(String.valueOf(input[high]),String.valueOf(temp))){ high--; } input[low] = input[high]; while(low<high && isBigger(String.valueOf(temp),String.valueOf(input[low]))){ low++; } input[high] = input[low]; } input[low] = temp; return low; } public static boolean isBigger(String num1, String num2){ //一种新的排序方式 String temp1 = num1+num2; String temp2 = num2+num1; for(int i = 0;i<temp1.length();i++){ if(temp1.charAt(i)>temp2.charAt(i)){ return true; }else if(temp1.charAt(i)<temp2.charAt(i)){ return false; } } return true; } }
转载请注明原文地址: https://www.6miu.com/read-14279.html

最新回复(0)