重写sort比较器

本文介绍了一个C++程序,该程序接收一个正整数数组,并通过特定算法将这些数字拼接成可能的最小数值。文章详细展示了如何通过自定义字符串比较函数实现排序逻辑,以确保最终结果是最小的数字组合。

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

class Solution {
public:
    static bool compare(const string &str1, const string &str2){
        string s1 = str1 + str2;
        string s2 = str2 + str1;

        return s1< s2; //降序排列
    }

    string PrintMinNumber(vector<int> numbers) {
        string result;
        if(numbers.size()<=0)
            return result;

        vector<string>strNum;
        for(int i = 0; i < numbers.size();i++){
            string str = to_string(numbers[i]);
            strNum.push_back(str);
        }

        //排序,传入比较器,从小到大排序
        sort(strNum.begin(),strNum.end(),compare);

        for(int i = 0;i< strNum.size();i++){
            result.append(strNum[i]);
        }

        return result;
    }
};
### 创建用于排序二维数组的比较器 为了实现二维数组按照特定条件进行排序,在 Java 中通常会使用 `Comparator` 接口来定义自定义排序逻辑。下面展示了一个具体的例子,说明如何基于第二列元素对整数类型的二维数组执行降序排序。 #### 定义匿名内部类作为比较器 当需要根据二维数组中的某一列来进行排序时,可以通过创建实现了 `Comparator` 接口的对象并重写其 `compare()` 方法来完成这一操作。这里给出了一种通过匿名内部类的方式实例化 `Comparator<Integer>` 的方式[^1]: ```java import java.util.Arrays; import java.util.Comparator; public class CustomSortExample { public static void main(String[] args) { Integer[][] matrix = {{2, 3}, {1, 5}, {4, 4}}; // 使用匿名内部类定义比较器 Arrays.sort(matrix, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return Integer.compare(o2[1], o1[1]); // 对于每一对元素o1和o2,依据它们第二个位置上的数值做逆向对比 } }); // 输出排序后的矩阵 for (int[] row : matrix) { System.out.println(Arrays.toString(row)); } } } ``` 这段代码展示了怎样利用匿名内部类的形式构建一个专门针对二维数组某列数据的比较器,并将其应用于 `Arrays.sort()` 函数之中以达到预期效果。 #### 利用 lambda 表达式简化语法结构 除了上述传统的方法外,还可以采用更简洁明了的 Lambda 表达式形式来表达相同的含义。这种方式不仅减少了冗余代码量而且提高了可读性和维护效率[^3]: ```java // 使用lambda表达式的版本 Arrays.sort(matrix, (a, b) -> Integer.compare(b[1], a[1])); ``` 此行语句同样完成了相同的功能——即按照二维数组各子数组中索引为1的位置处存储的数据大小关系实施降序排列;只不过采用了更为紧凑直观的方式来书写而已。 #### 应用 `comparingInt` 工具函数进一步优化 对于更加复杂的场景或是追求极致性能的应用场合来说,推荐考虑调用静态导入的辅助工具函数如 `Comparator.comparingInt()` 来代替手动编写完整的比较逻辑。这不仅能有效降低出错几率还能增强程序的整体表现力: ```java // 使用Comparator.comparingInt()方法 Arrays.sort(matrix, Comparator.comparingInt((int[] arr) -> arr[1]).reversed()); ``` 这种方法借助泛型机制自动推导参数类型从而省去了显式声明变量的工作负担;与此同时还支持链式调用来组合多个不同的排序规则(比如先按第三列再按第四列...),极大地提升了灵活性与扩展能力。 综上所述,无论是采取传统的面向对象编程风格还是现代流行的函数式编程范式,都可以轻松达成对多维集合的有效管理和高效处理目的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值