75. Sort Colors——array——two pointer

本文深入探讨了双指针算法的应用,特别是在数组排序中的高效实现。通过实例讲解,展示了如何使用双指针red和blue来快速对数组进行0和2的归位,达到优化排序效果的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目分析:可以用双指针red和blue来记录当前已经就位的0序列和2序列的边界位置。

class Solution:
    def subsetsWithDup(self, nums):
        red = 0
        blue = len(nums)-1
        i = 0
        while i <= blue:
            if nums[i] == 0:
                nums[i] = nums[red]
                nums[red] = 0
                red += 1
                i += 1    # 因为red在i之前或者和i相等
            elif nums[i] == 2:
                nums[i] = nums[blue]
                nums[blue] = 2
                blue -= 1
            else:
                i += 1
        return nums
### Java 中数组 `sort` 方法与列表 `sort` 方法的区别及用法 #### 数组排序 (`Arrays.sort`) 对于基本数据类型的数组以及对象数组,可以使用来自 `java.util.Arrays` 类中的静态方法 `sort()` 进行排序。此方法提供了多种重载形式以适应不同需求。 ```java // 对整型数组进行升序排列 int[] intArray = {7, 2, 9}; Arrays.sort(intArray); System.out.println(Arrays.toString(intArray)); // 输出 [2, 7, 9] // 使用自定义比较器对字符串数组按长度降序排列 String[] stringArray = {"apple", "banana", "pear"}; Arrays.sort(stringArray, Comparator.comparingInt(String::length).reversed()); System.out.println(Arrays.toString(stringArray)); // 可能输出 ["banana", "apple", "pear"] ``` 上述代码展示了如何利用内置功能快速完成不同类型的一维数组排序操作[^1]。 #### 列表排序 (`Collections.sort`, 或者 List 的 `sort` 方法) 针对实现了 `List<E>` 接口的数据集合(比如 `ArrayList<T>`),可以通过调用 `Collections.sort(List<T>)` 静态方法或是直接调用 `List<T>.sort(Comparator<? super T> c)` 实例方法来进行排序。这两种方式都允许传入一个可选参数——即用于指定元素间相对顺序的 `Comparator` 比较器实例。 ```java import java.util.*; public class Main { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(Arrays.asList("orange", "apple", "grape")); // 升序自然排序 Collections.sort(list); System.out.println(list); // 输出 [apple, grape, orange] // 自定义排序规则:按照字母逆序 list.sort((o1, o2) -> o2.compareTo(o1)); System.out.println(list); // 输出 [orange, pear, apple] } } ``` 这段例子说明了通过传递不同的 `Comparator` 来改变默认行为的可能性[^3]。 值得注意的是,在处理复杂类型时,如果希望某个特定类的对象能够被自动排序,则可以让这个类实现 `Comparable` 接口并提供自己的 `compareTo(T other)` 方法;而对于临时性的特殊排序逻辑,则更适合创建独立于业务实体之外的外部比较器[^2]。 另外,当涉及到频繁插入或移除场景下优化性能的选择上,建议优先考虑 `ArrayList` 除非有明确理由转向链表结构如 `LinkedList`[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值