码迷,mamicode.com
首页 > 编程语言 > 详细

把数组排成最小的数

时间:2015-08-14 11:49:02      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

题目:

输入一个正整形数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中的最小的一个,例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字321323。

思路:

将数组转换成字符串,然后按照字符串的排序规则直接直接比较。也就是说"3"+"32" 和"32"+"3"比较,如果前者大于后者,则交换3和32的位置
	public static  void printMinNumber(int[] num)
	{
		 
		if(num==null || num.length ==0)return ;
		String[] newNum = new String[num.length];

		
		for(int index=0;i<num.length;index++)
		{
			newNum[index] = String.valueOf(num[index]);
		}
		for(int i =0 ;i<newNum.length-1 ;i++)
		{
			for(int j=i+1;j<newNum.length ;j++)
			{
			
				String temp1 = newNum[i]+newNum[j];
				String temp2 = newNum[j]+newNum[i];
				if(temp1.compareTo(temp2)>0)
					swap(newNum,i,j);//交换
			}	
		}
		
		for(String te : newNum)
			System.out.print(te+"  ");
		 
	}

看了剑指Offer上面做的,定义了一个排序规则,借助qsort,其时间复杂度为O(nlogn)。
我们可以利用java中的Arrays.sort(),如下
       public static void printMinNumber(int[] num)
	{
		 
		if(num==null || num.length ==0)return ;
		String[] newNum = new String[num.length];
	 
		int index=0;
		for(int tem : num)
		{
			newNum[index++] = String.valueOf(tem);
		}
	 
	 
		String s1 =num[0]+num[1];
		String s2 = num[1]+num[0];
		
		Arrays.sort(newNum,new Comparator<String>(){

			public int compare(String o1,String o2)
			{
				
				return (o1+o2).compareTo(o2+o1);
			}
	
		});
		
		
		for(String te : newNum)
			System.out.print(te+"-----");
	}
其实思想都是一样的,都是比较第一个加第二个和第二个加第一个哪一个比较大。

Arrays.sort()如果排序的是基本类型,底层实现是快排,如果排序的是对象类型,则使用的是归并排序。时间复杂度都为O(nlogn)。




版权声明:本文为博主原创文章,转载请注明出处。

把数组排成最小的数

标签:

原文地址:http://blog.csdn.net/u014307117/article/details/47658309

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!