当前位置: 首页 > 知识库问答 >
问题:

找不到适合排序的方法(int[],)

夏令秋
2023-03-14

算法问题:给定一个非负整数列表,将它们排列成最大的数。

例如,给定[3,30,34,5,9],形成的最大数是9534330。

注意:结果可能很大,因此需要返回一个字符串,而不是整数。

    public class Solution {
    public String largestNumber(int[] num) {
        Arrays.sort(num, new java.util.Comparator<Integer>() {
            @Override
            public int compare(Integer a, Integer b) {
                String s1 = String.valueOf(a), s2 = String.valueOf(b);
                return Integer.parseInt(s1 + s2) - Integer.parseInt(s2 + s1);
            }
        });
        StringBuilder builder = new StringBuilder();
        for (int i = num.length - 1; i >= 0; i--)   builder.append(num[i]);
        return builder.toString();
    }
}
public String largestNumber(int[] num) {
    int N = num.length;
    String[] aux = new String[N];
    for (int i = 0; i < N; i++) aux[i] = String.valueOf(num[i]); // int[] -> String[]
    Arrays.sort(aux, new Comparator<String>() {
        @Override
        public int compare(String a, String b) {
            return (int) (Long.parseLong(a + b) - Long.parseLong(b + a));  // note the overflow of int, max + max
        }
    });
    StringBuilder builder = new StringBuilder();
    for (int i = N - 1; i >= 0; i--)    builder.append(aux[i]);
    int sub = 0;
    for ( ; sub < builder.length() - 1 && builder.charAt(sub) == '0'; sub++);
    return builder.substring(sub).toString();
}

而且我还在想办法避免使用额外的空间。

共有1个答案

颛孙成益
2023-03-14

这是因为intinteger是不同的类型。int是一个原语,integer是它的对象包装器。比较器 仅用于对象;它不能用于原语。

ints放入integers的容器中,例如arraylist ,并使用比较器解决问题。

请注意,您的方法对于非常大的整数可能会失败,因为串联两个有效的int可能会产生一个太大的数字,int无法容纳。您可以返回(S1+S2).compareTo(S2+S1)来进行词典比较,这与相同长度数字的数字比较相同。

 类似资料:
  • 在启动activity中找不到合适的方法是显示错误的错误是: 错误:(123,17)错误:找不到适合startActivities(Intent)方法上下文的方法。startActivities(Intent[])不适用(参数不匹配;Intent无法转换为Intent[])方法上下文。startActivities(Intent[])不适用(参数不匹配;Intent无法转换为Intent[])方法

  • 我想收集一些数据并将其存储到数据库(在Java中,使用MySQL)。其中一个数据是日期(创建/插入此条目时)。 我已经试过了 将日期转换为SQL友好的格式,但我仍然得到错误 找不到适合getDate(Date)的方法 方法结果集。getDate(int)不适用 (参数不匹配;日期无法转换为int) 方法ResultSet.get日期(字符串)不适用 (参数不匹配;日期无法转换为字符串) 错误发生在

  • 我试图在Flink的数据流上应用每窗口功能。以下是我的代码 下面是我的实现MyProcessWindow函数 然而,当我试图通过maven编译上述代码时,我得到了以下错误 知道我做错了什么吗?仅供参考,我正在使用ApacheFlink 1.5.1版,并在Mac上使用maven3编译Java代码。

  • 我需要创建一个以id和值作为资源的ArrayList,这样我将来就可以知道给定图标在哪个id下。不幸的是,我的解决方案遇到了一个问题,如何解决? 我给出了一个错误: 错误:找不到添加(int,int)航路点图标的合适方法。添加(0,R.drawable.ic_point_默认值)

  • 问题内容: 我希望有一个人可以帮助我。我正在研究一个与SQLite数据库连接的简单应用程序。以下是我的连接代码: 这只是一个在数据库中加载用户名和密码的窗口。我的问题是,当我单击按钮时,出现以下异常: (我找到了一个有关如何使用Java连接到SQLite数据库的示例,我发现该示例运行良好) 这个程序我正在窗口构建器(日食)中做。我使用的示例中使用的驱动程序相同。我不知道我是否必须使用其他驱动程序。

  • 问题内容: 这个问题已经在这里有了答案 : 臭名昭著的java.sql.SQLException:未找到合适的驱动程序 (13个答案) 4年前关闭。 我有一个Java类,该类通过在Tomcat上运行的JSP中使用的JDBC通过JDBC访问MySQL数据库,并且遇到“未找到驱动程序异常”的问题。 我有一个方法: 这会在“ 这是我从catalina.out的打印输出”上引发错误: 唯一重要的错误是一个