1. 程式人生 > >貪心演算法的經典案例——最大整數 java實現

貪心演算法的經典案例——最大整數 java實現

題目:設有n個正整數,將它們連線成一排,組成一個最大的多位整數。
例如:n=3時,3個整數13,312,343,連成的最大整數為34331213。

又如:n=4時,4個整數7,13,4,246,連成的最大整數為7424613。

輸入:2
12 121

輸出:12121

import java.util.Scanner;
//貪心標準:先把整數轉換成字串,然後在比較a+b和b+a,如果a+b>=b+a,就把a排在b的前面,反之則把a排在b的後面。

public class Main {

public static void main(String[] args) {

Scanner input = new Scanner (System.in);
int N = input.nextInt();
int [] arr = new int[N];
int i =0,j=0;int temp;
for (i=0;i<N;i++)
arr[i] = input.nextInt();
for (i=0;i<N-1;i++)
for (j=i+1;j<N;j++)
if (compare(arr,i,j))
{
temp = arr[i];
arr[i] = arr[j];
arr[j] =temp;
}
for (i=0;i<N;i++)
System.out.print(arr[i]);
}

static boolean compare(int [] arr, int st, int end)
{
String a,b;//將整型陣列的元素轉化為字串相加,然後進行比較
a = String.valueOf(arr[st])+String.valueOf(arr[end]);
b = String.valueOf(arr[end])+String.valueOf(arr[st]);
//Java中字串的比較函式,compareTo() 的返回值是int, 它是先比較對應字元的大小(ASCII碼順序),
//阿拉伯數字組成的字串比較與數值大小比較結果一樣
//前字串的值小於後字串返回負值,前字串大於後字串返回正值
if (a.compareTo(b)<0)
return true;
else
   return false;
}

}