zoukankan      html  css  js  c++  java
  • 最大数 快排+数学计算

    题目:

      

     思路:

      1 快速排序思想,倒序排列 + 数学公式  

          int x = 12; int y = 345 x 拼接 y = 12345 = 12 * 1000 + 345 = x * 1000 + y;

          y 拼接 x = 34512 = 345 * 100 + 12 = y * 100 + x;

          上面的1000是哪里来的?因为y是3位数。

          上面的100是哪里来的?因为x是2位数;

      2 遍历nums 用StringBuilder进行拼接,返回结果


    (一) 代码

    class Solution {
        public String largestNumber(int[] nums) {
    
            //快速排序 排序结果为倒叙,用Stringbuilder进行拼接
            quickSort(nums,0,nums.length-1);
            //如果倒排结果第一个为0 返回0
            if(nums[0] == 0){
                return "0";
            }
            //拼接结果
            StringBuilder sb = new StringBuilder();
            for(int num : nums){
                sb.append(num);
            }
            return sb.toString();
        }
    
        private void quickSort(int[] nums,int start,int end){
    
            if(start >= end){
                return;
            }
            //基准数
            int privot = nums[start];
            //基准下标
            int index = start;
    
            for(int i = start+1 ; i <= end ; i++){
                //进位
                long x = 10;  //注意这里一定是long 类型
                long y = 10;  //注意这里一定是long 类型
                //基准的进位
                while(privot >= x){
                    x *= 10;
                }
                //数组i 位置数据的进位
                while(nums[i] >= y){
                    y *= 10;
                }
                //数学计算比较
                if(nums[i] * x + privot > privot * y + nums[i]){
                    index += 1;
                    swap(nums,index,i);
                }
            }
            //将基准数交换到相应的位置
            swap(nums,index,start);
            //递归
            quickSort(nums,start,index-1);
            quickSort(nums,index+1,end);
        }
    
        private void swap(int[] nums,int i,int j){
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }

          无力反抗,就顺应

  • 相关阅读:
    Hufman编码实现运用1 (原理不描述)
    E
    1178: [Apio2009]CONVENTION会议中心
    1071: [SCOI2007]组队
    #333. 【NOIP2017】宝藏
    CF 96 D. Volleyball
    CF 987 D. Fair
    qbxt的题:运
    qbxt的题:找一个三元环
    4361: isn
  • 原文地址:https://www.cnblogs.com/misscai/p/15418825.html
Copyright © 2011-2022 走看看