【问题标题】:Finding the largest combination given a list/array of integers给定整数列表/数组找到最大组合
【发布时间】:2022-11-21 03:36:13
【问题描述】:

我的实验室教授给出的一个问题,如标题所示:找到给定整数列表/数组的最大组合。IE:

input: {10, 68, 75, 7, 21, 12}
stdout: 77568211210
my output : 75768211210

当前代码:

import java.util.*;
import java.lang.*;

public class classwork6
{
    static Scanner in = new Scanner(System.in);
    static void sort(String[] arr)
    {
        for(int i=0;i<arr.length;i++)
        {
            for(int j=i+1;j<arr.length;j++)
            {
                if(arr[i].compareTo(arr[j])<0)
                {
                    String temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }
    public static void main(String[] args)
    {
        int[] list = {10, 68, 75, 7, 21, 12};
        String[] arr = new String[list.length];
        for(int i=0;i<list.length;i++)
        {
            arr[i] = String.valueOf(list[i]);
        }
        sort(arr);
        System.out.print(Arrays.toString(arr).replaceAll("[\\[\\], ]",""));
    }
}

我的第一次尝试只是对数组进行排序,之后我很快发现 777568211210>75682112107

我最近的尝试是按字典顺序比较整数的字符串值。但是输出仍然不正确 777568211210>75768211210

【问题讨论】:

  • 你能更精确吗?解释这种组合是如何工作的?它是什么类型的操作,还是只是将值连接在一起,例如 12 + 22 = 1222?
  • 您是否了解解决方案不是对数组进行排序? ["19", "9"] 最大化为 919 而不是 199
  • 我目前只是将整数的字符串值连接在一起:>
  • 我的编程经验很少,我最初的想法是排序,因为我没有考虑过那些情况。

标签: java sorting


【解决方案1】:

你在正确的轨道上。但想想看,哪个数字会“给”更多的最终结果:91 或 911。

很明显,较短的数字提供了更多获得更高数字的“可能性”。因此,如果两个数字以相同的字符开头,您的排序应该优先考虑较短的数字

【讨论】:

  • 那么,按数字的升序和值的降序应用我的排序?
  • 嗯,类似的东西。但要注意数字“1”不会比例子“21”“多”,所以你仍然需要一个一个地比较字符。
【解决方案2】:

只是 lexically 比较每对整数作为字符串,背对背连接。考虑77234"77243" 大于 "23477" lexically。所以 77 会先出现,然后是 234

List<Integer> list = new ArrayList<>(List.of(92, 101, 79, 42, 2002, 22));

Comparator<Integer> comp = (b,a)-> (a+""+b).compareTo(b+""+a);

list.sort(comp);
System.out.println(list);
    
String result = list.stream().map(i->Integer.toString(i)).reduce("",String::concat);
System.out.println(result);

印刷

[92, 79, 42, 22, 2002, 101]
927942222002101

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2012-12-29
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多