给定一个整数数组,求整数排列之后最大值(需要考虑大数问题)C#

思路解析

首先使用冒泡排序,让数组的中的每两个元素拼接后比较,比较规则是:若 a 拼接 b,大于 b 拼接 a,则将a放到数组前面。最后将排序后的所有值,取出来,拼接为字符串返回。

Ps:所有的比较和拼接都是用字符串来实现,可以避免大数溢出问题

完整代码
using System;
using System.Text;

/// <summary>
/// 思路: 使用冒泡排序,让数组的中的每两个元素拼接后比较,比较规则是:若 a 拼接 b,大于 b 拼接 a,则将a放到数组前面。最后将排序后的所有值,取出来,拼接为字符串返回。 
/// Ps:所有的比较和拼接都是用字符串来实现,可以避免大数溢出问题
/// </summary>
public class MaxArrayJoint
{
    
    /*
        给定一个数组:组合成最大数值
     */
    public static string DoMaxArrayJoint(int[] args)
    {
        if (args.Length == 1)
        {
            return args[1].ToString();
        }
        //先将数组中所有的元素,转换为字符串,防止在冒泡时频繁的ToString
        string[] argsString = new string[args.Length];
        for (int i = 0; i < args.Length; i++)
        {
            argsString[i] = args[i].ToString();
        }
        //参数数组已无用,可以置空,以垃圾回收
        args = null;
        string tempStringToSwap = null;
        //冒泡排序,以完成对每个拼接数的比较
        for (int i = 0; i < argsString.Length - 1; i++)
        {
            for (int j = i + 1; j < argsString.Length; j++)
            {
                /*
                    比较两个数字哪个作高位排列
                    example: 9, 98 --> 998; 15, 18 --> 1815
                 */
                if (string.Compare(argsString[i] + argsString[j], argsString[j] + argsString[i]) == 1)
                {
                    tempStringToSwap = argsString[i];
                    argsString[i] = argsString[j];
                    argsString[j] = tempStringToSwap;
                }
            }
        }
        //输出最终结果
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = argsString.Length - 1; i >= 0; i--)
        {
            stringBuilder.Append(argsString[i]);
        }
        return stringBuilder.ToString();
    }


    public static void Main()
    {
        int[] test = { 478744, 151, 98716, 99999, 1111111111, 222979891, 1649817484 };
        Console.Write(DoMaxArrayJoint(test));
        Console.ReadKey();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值