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;
        }
    }

          无力反抗,就顺应

  • 相关阅读:
    PHP base_convert() 函数详解
    PHP中位运算符
    MySQL中SQL Mode的查看与设置
    HTML 字符实体详情
    php7中 ?? 和 ?: 的区别
    正则表达式详解
    PHP sprintf() 函数详解
    php-config——PHP配置信息的查看
    无界工作记录
    CMake根据平台移植检查设置文件编译选项
  • 原文地址:https://www.cnblogs.com/misscai/p/15418825.html
Copyright © 2011-2022 走看看