美文网首页
379. 将数组重新排序以构造最小值

379. 将数组重新排序以构造最小值

作者: 6默默Welsh | 来源:发表于2018-03-20 20:03 被阅读40次

描述

给定一个整数数组,请将其重新排序,以构造最小值。

注意事项

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

样例

给定 [3, 32, 321],通过将数组重新排序,可构造 6 个可能性数字:

3+32+321=332321
3+321+32=332132
32+3+321=323321
32+321+3=323213
321+3+32=321332
321+32+3=321323

其中,最小值为 321323,所以,将数组重新排序后,该数组变为 [321, 32, 3]

挑战

在原数组上完成,不使用额外空间。

思路

重写 compare 方法

代码

public class Solution {
    /**
     * @param nums n non-negative integer array
     * @return a string
     */
    public String minNumber(int[] nums) {
        int n = nums.length;
        if (n < 1) {
            return "";
        }
        
        String[] strs = new String[n];
        for (int i = 0; i < n; i++) {
            strs[i] = String.valueOf(nums[i]);
        }
        
        Arrays.sort(strs, new Cmp());
        
        String ans = "";
        // 从大到小排列后,要求最小数必须从末尾开始取值拼接
        for (int i = n - 1; i >= 0; i--) {
            ans = ans.concat(strs[i]);
        }
        
        // 输入数字一部分为 0 的情况
        int i = 0;
        while (i < n && ans.charAt(i) == '0') {
            i++;
        }

        // 输入数字全部为 0 的情况
        if (i == n) {
            return "0";
        }
        return ans.substring(i);
    }
}

// 重写排序方法,如果 ba 大于 ab 则交换 a b 顺序,排序为从大到小排列
class Cmp implements Comparator<String>{
    @Override
    public int compare(String a, String b) {
        String ab = a.concat(b);
        String ba = b.concat(a);
        return ba.compareTo(ab);
    }
}

相关文章

  • 379. 将数组重新排序以构造最小值

    描述 给定一个整数数组,请将其重新排序,以构造最小值。 注意事项 The result may be very l...

  • 排序算法--选择排序

    选择排序基本思想如下: 遍历未排序数组,选出最小值,放在数组开头 在剩余未排序数组中,选出最小值,排在已排序数组的...

  • 二、基本算法

    一、选择排序 核心思想: 以数组为例:取出数组的最大值(最小值),然后将最大值与数组的第一位进行交换。 讲解:第一...

  • ios 数组排序一些基础方法

    数组翻转 数组升序 数组降序 获取数组对象和,平均数,最大值,最小值 冒泡排序 原理:比较两个相邻的元素,将值大的...

  • 选择排序(Java版)

    选择排序是每次循环都从未被选择的数组中选取一个最小值放在数组前面。第一次循环将全部数组中的最小值放在下标为0的位置...

  • C语言:十种排序(一) - 冒泡排序

    前言 一种将无序数组进行排序的方法。 冒泡排序,主要思想:每次循环找到一个最大值或最小值放到数组最右边(通过左右元...

  • 排序算法

    1、选择排序从数组第一个开始:i=0将数组中第 i 个当作最小,保存最小值的数组下标:minPos=i在剩余的数中...

  • number数组排序

    这里记录两个手写方法的思路:1.找到不定长数组中的最小值;2.给不定长数组排序 number数组最小值 numbe...

  • iOS小记--NSArray 排序

    数组内装有V3HealthModel,依靠model的startTime属性将数组重新排序 一: NSMutabl...

  • Swift经典排序算法-桶排序

    桶排序 一、基本思路 a、将数组中元素划分到不同的桶中。先对遍历数组找到最大值元素(maxNum)和最小值元素(m...

网友评论

      本文标题:379. 将数组重新排序以构造最小值

      本文链接:https://www.haomeiwen.com/subject/lwmbfftx.html