洛谷-P1012

一、题目描述


二、题解

       1. 解题思路与方法   

        题目要求简单直接给出,将数全部首尾相接拼起来后所得的数最大,根据题意会发现,这实际上是一道排序题,需要将给出的数按一定的顺序排序,但该以什么样的顺序排序呢,根据贪心的思想简单分析一下就会发现应该将这些数以拼起来最大的顺序排序,此时排序的方法就明了了,举个例子,有12和139两个数,那该怎么排序呢?很简单,直接将两个数拼起来,可以根据先后顺序拼成“12139”或“13912”两个数,此时进行比较哪个数更大即可知道谁该排在前面。

       2. code

import java.security.spec.RSAOtherPrimeInfo;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        ArrayList<Long> arr = new ArrayList<>(); 
        for (int i = 0; i < n; i++) {
            arr.add(sc.nextLong());
        }
        String ans="";
        arr.sort(new Comparator<Long>() {      //重写比较的方法
            @Override
            public int compare(Long o1, Long o2) {
                String s1 = o1.toString()+o2.toString();
                String s2 = o2.toString()+o1.toString();
                if(Long.parseLong(s1)==Long.parseLong(s2)){   //相等则谁排前面都一样
                    return 0;
                }
                return Long.parseLong(s2)>Long.parseLong(s1)?1:-1;    
                //不相等则按合并后值大的顺序排
            }

        });
        for (Long aLong : arr) {      //排好后即为答案
            ans += aLong;
        }
        System.out.println(ans);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值