检查一个项目是否存在于最多有1000000个或更多项目的数组中的有效方法是什么

本文关键字:项目 数组 是什么 方法 有效 1000000个 一个 于最多 存在 是否 检查 | 更新日期: 2023-09-27 18:27:22

如果您想检查一个int值是否存在于一个最多有1000000个项的int[]数组中,最有效的方法是什么?

int[] values = {1, 2, 3, 4};
value = 4

我知道使用for循环或类似的东西:

values.Contains(value);
Array.Exists(values , i => i==value );
Array.IndexOf(values, value) != -1;

检查一个项目是否存在于最多有1000000个或更多项目的数组中的有效方法是什么

因为数组是排序的,所以最好的方法是使用BinarySearch方法。

bool IsInArray(int[] values, int value)
{
    var index = Array.BinarySearch(values, value);
    return (index >= 0);
}

如果数组没有排序,那么您列出的其他3个选项可能都会执行完全相同的操作,我只会使用values.Contains(value);,因为这是最简单的选择。

算法:

  1. 若范围小于10个元素,则迭代直到找到元素。

  2. 否则,找到数组的中间元素,并将其与您的值进行比较。

  3. 根据比较结果选择新的范围(前半部分或后半部分)并递归地运行步骤1。