zoukankan      html  css  js  c++  java
  • 把数组排成最小的数

    题目:

    输入一个正整形数组,把数组里全部数字拼接起来排成一个数,打印能拼接出的全部数字中的最小的一个。比如输入数组{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)。




  • 相关阅读:
    将数据绑定通过图表显现
    d3.js初识
    Josn
    d3-tip.js
    Java知识点总结
    Javascript的学习
    Java的多线程学习
    day11
    day10
    day09
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7155647.html
Copyright © 2011-2022 走看看