貪心演算法 最大整數
題目:設有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; }
} --------------------- 來源:CSDN 原文:https://blog.csdn.net/qq_35042031/article/details/77896697