You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从已排序数组中提取唯一元素并获取结果数组长度?

提取已排序数组中的唯一元素并获取长度

嘿,针对你这个已排序数组提取唯一元素的需求,我给你分享两种实用的解法,适配不同的场景:

方法一:利用集合(Set)快速实现

如果你的数据量不大,或者更看重代码简洁性,直接用Python的集合特性就能搞定——集合天然会自动去重,唯一需要注意的是集合会打乱元素顺序,所以我们再给它排个序(刚好原数组本身就是有序的,排序后结果完全符合预期):

# 定义你的已排序数组
original_arr = (1, 1, 2, 3, 3, 4)
# 去重并恢复有序
unique_arr = tuple(sorted(set(original_arr)))
# 获取长度
unique_length = len(unique_arr)

print(unique_arr)  # 输出:(1, 2, 3, 4)
print(unique_length)  # 输出:4

这种写法非常简洁,几行代码就能完成需求,唯一的小缺点是如果数组特别大,额外的排序操作会带来一点性能开销。

方法二:双指针法(针对已排序数组的高效解法)

因为你的数组已经是排序好的,重复元素必然是相邻的,这时候用双指针法可以做到O(n)的时间复杂度,而且不需要额外的排序操作,性能更优:

def extract_unique(arr):
    if not arr:
        return (), 0
    # 元组不可变,先转为列表操作
    arr_list = list(arr)
    slow_ptr = 0
    # 快指针遍历整个数组
    for fast_ptr in range(1, len(arr_list)):
        # 当找到和慢指针位置不同的元素时,移动慢指针并更新元素
        if arr_list[fast_ptr] != arr_list[slow_ptr]:
            slow_ptr += 1
            arr_list[slow_ptr] = arr_list[fast_ptr]
    # 截取到慢指针位置的前半部分就是去重后的数组
    unique_result = tuple(arr_list[:slow_ptr + 1])
    return unique_result, len(unique_result)

# 调用函数
original_arr = (1, 1, 2, 3, 3, 4)
unique_arr, unique_length = extract_unique(original_arr)

print(unique_arr)  # 输出:(1, 2, 3, 4)
print(unique_length)  # 输出:4

这个方法的核心是用慢指针标记当前唯一元素的位置,快指针去寻找下一个不同的元素,找到后就把它放到慢指针的下一个位置,最后截取有效部分即可,完全利用了已排序数组的特性,效率拉满。


内容的提问来源于stack exchange,提问作者vamsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:32:54