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

判断数组末尾是否包含另一数组所有元素(顺序不限)的最简方法

数组尾部包含性判断方案

前提约束(题目给定可直接依赖)

  • array1.Length > array2.Length
  • array1中所有元素唯一
  • array2中所有元素唯一

最简实现

基于.NET Span和LINQ实现,代码极简易维护,无显式堆内存分配:

using System.Linq;

public static bool IsTailContains(int[] array1, int[] array2)
{
    var tailSpan = array1.AsSpan(array1.Length - array2.Length);
    return array2.All(tailSpan.Contains);
}

零分配高性能实现

完全避免委托、堆对象分配,适合高性能场景,时间复杂度为O(m²),其中m为array2长度:

public static bool IsTailContainsOptimized(int[] array1, int[] array2)
{
    int matchCount = 0;
    int tailStart = array1.Length - array2.Length;

    foreach (var target in array2)
    {
        for (int i = tailStart; i < array1.Length; i++)
        {
            if (array1[i] == target)
            {
                matchCount++;
                break;
            }
        }
    }

    return matchCount == array2.Length;
}

补充说明:因为两个数组元素都唯一,所以不会出现重复匹配计数的问题,只要匹配次数等于array2的长度,就说明array1尾部完全包含array2的所有元素,不需要考虑顺序。如果array2长度较大(超过32),也可以用栈分配的哈希集合优化到O(m)时间复杂度,进一步提升性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:45:03