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

如何判断升序排序后的数组是否完全包含于另一数组?

判断排序后数组是否完全包含于目标数组的方案

针对你提出的需求——验证排序后的ints数组所有元素都存在于i数组中(只要有一个元素不在就返回false,和判断元素重叠的逻辑不同),这里提供两种实用的实现方案:

方案一:Linq简洁实现(不考虑元素重复次数)

如果只需要验证元素是否存在,不需要关心元素出现的次数,直接用Linq的All方法配合Contains就能快速实现,代码非常直观:

// 排序后的ints数组
int[] sortedInts = { 2, 4, 5, 6 };
// 目标数组i
int[] targetArray = { 1, 2, 4, 5, 6, 8, 12 };

// 判断sortedInts的所有元素都在targetArray中
bool isFullyContained = sortedInts.All(x => targetArray.Contains(x));

当sortedInts包含3这类不在targetArray中的元素时,这个表达式会直接返回false,完全符合需求。不过这种方法的时间复杂度是O(m*n)(m是sortedInts长度,n是targetArray长度),适合处理小规模数组。

方案二:双指针高效实现(支持重复元素校验)

如果两个数组都是有序的(你的场景里sortedInts已经排序,targetArray本身也是有序的),用双指针法效率更高,还能正确校验元素的重复次数(比如sortedInts有两个2,但targetArray只有一个2时,会返回false):

int[] sortedInts = { 2, 4, 5, 6 };
int[] targetArray = { 1, 2, 4, 5, 6, 8, 12 };

int p1 = 0, p2 = 0;
bool isFullyContained = true;

while (p1 < sortedInts.Length && p2 < targetArray.Length)
{
    if (sortedInts[p1] == targetArray[p2])
    {
        // 找到匹配元素,同时移动两个指针
        p1++;
        p2++;
    }
    else if (sortedInts[p1] < targetArray[p2])
    {
        // 当前sortedInts的元素比target的小,说明target里没有这个元素
        isFullyContained = false;
        break;
    }
    else
    {
        // target的元素更小,移动target指针继续查找
        p2++;
    }
}

// 如果sortedInts还有元素没遍历完,说明存在未匹配的元素
if (p1 < sortedInts.Length)
{
    isFullyContained = false;
}

// 输出结果
Console.WriteLine(isFullyContained);

这种方法的时间复杂度是O(m+n),在处理大数组时性能优势明显,同时能覆盖更严谨的校验场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:40:48