Largest Number

本文讨论了一个算法问题,即如何将一组非负整数排列成一个最大的数字字符串。通过使用自定义比较器,实现了一个高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

public class Solution2 {
	private static CompareStary compStary = new CompareStary();
    public static void main(String[] args) {
    	test(new int[]{128,12});
    	
	}
    public static String test(int nums[])
    {
    	String ret ="";
    	int length = nums.length;
    	if(length > 0)
    	{
			List<List<String>> lst= new ArrayList<List<String>>();
			for(int i = 0; i <= 9;i++)
			{
				lst.add(new ArrayList<String>());
			}
			for(int i = 0; i < nums.length;i++)
			{
				String str = nums[i]+"";
			    int temp = (int)(str.charAt(0) - '0');
			    List<String> lstTemp = lst.get(temp);
			    lstTemp.add(nums[i]+"");
			}
			for(int i = 0;i <= 9;i++)
			{
				List<String> temp= (List<String>)lst.get(i);
				if(temp.size() != 0 && temp.size() != 1)
				{
				   
				   Collections.sort(temp, compStary);
				}
			}
			StringBuffer sb = new StringBuffer();
			ret = "";
			for(int i = 9;i >= 0;i--)
	    	{
				
	    		List<String> fin = (List<String>)lst.get(i);
	    		if(fin.size() != 0)
	    		{
		    		for(int j =  fin.size() - 1;j >= 0; j--)
		    		{
		    			sb = sb.append(fin.get(j));
		    		}
	    		}
	    	}
			ret = sb.toString();
			System.out.println(ret);
    	}
    	return ret;
    }
    static class CompareStary implements Comparator<String>
    {
		@Override
		public int compare(String src, String another) {
			int ret = 0;
			int length1 = src.length();
			int length2 = another.length();
			char comChar = src.charAt(0);
			StringBuffer sb = new StringBuffer();
			if(length1 - length2 >=0)
			{
				sb.append(another);
				int temp = length1 - length2;
				for(int i = 0;i < temp;i++)
				{
					sb.append(comChar);
				}
				another = sb.toString();
			}
			else
			{
				sb.append(src);
				int temp = length2 - length1;
				for(int i = 0;i < temp;i++)
				{
					sb.append(comChar);
				}
				src = sb.toString();
			}	  
			ret = deal(src,another);
			return ret;
		}
		private int deal(String src, String another){
			char v1[] = src.toCharArray();
			char v2[] = another.toCharArray();
			int length = src.length();
			for(int k = 0; k < length;k++)
			{
			    char c1 = v1[k];
			    char c2 = v2[k];
			    if (c1 != c2) 
			    {
			    	if(c1 - c2 > 0)
			    	{
			    		return 1;
			    	}
			    	else if(c1 - c2 < 0)
			    	{
			    		return -1;
			    	}
			    }
			}
			return 0;
		}
    }
		
		
}


这段代码有问题,修改一下,MOV r0, #0x00002000 ; Initialize pointer to first number MOV r1, #9 ; Initialize counter with number of elements LDR r7, [r0] ; Load first number as largest LDR r8, [r0] ; Load first number as smallest Loop: ADD r0, r0, #4 ; Move pointer to next number LDR r2, [r0] ; Load the number in r2 CMP r7, r2 ; Compare largest with current number MOVLT r7, r2 ; If current number is smaller, update largest CMP r8, r2 ; Compare smallest with current number MOVGT r8, r2 ; If current number is larger, update smallest SUBS r1, r1, #1 ; Decrement counter BNE Loop ; Loop until all numbers are compared ; Display largest number on console MOV r0, #1 ; File descriptor for stdout LDR r1, =largest ; Address of string to be displayed MOV r2, #10 ; Length of string MOV r7, #4 ; Syscall number for write SWI 0 ; Call operating system ; Display largest number on LCD screen LDR r0, =0x40020C14 ; Address of LCD data register MOV r1, r7 ; Load largest number from r7 STR r1, [r0] ; Store the number in the LCD data register ; Display smallest number on console MOV r0, #1 ; File descriptor for stdout LDR r1, =smallest ; Address of string to be displayed MOV r2, #12 ; Length of string MOV r7, #4 ; Syscall number for write SWI 0 ; Call operating system ; Display smallest number on LCD screen LDR r0, =0x40020C14 ; Address of LCD data register MOV r1, r8 ; Load smallest number from r8 STR r1, [r0] ; Store the number in the LCD data register largest: .asciz "Largest number: %d\n" smallest: .asciz "Smallest number: %d\n"
05-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值