检查一个项目是否存在于最多 1000000 个项目或更多的数组中的有效方法是什么
What is the efficient way to check if an item is present in an array with up to 1000000 items ore more
如果您想检查 int[] 数组中是否存在一个 int 值,最多包含 1000000 个项目,那么最有效的方法是什么并最大限度地减少 CPU 周期?
int[] values = {1, 2, 3, 4};
value = 4
我知道使用 for 循环或类似这样的东西:
values.Contains(value);
Array.Exists(values , i => i==value );
Array.IndexOf(values, value) != -1;
算法:
如果范围小于10个元素,迭代直到找到元素。
否则找到数组的中间元素并将其与您的值进行比较。
取决于比较结果 select 新范围(前半部分或后半部分)并递归 运行 步骤 1。
因为您的数组已排序,所以最好的方法是使用 BinarySearch
方法。
bool IsInArray(int[] values, int value)
{
var index = Array.BinarySearch(values, value);
return (index >= 0);
}
如果数组未排序,那么您列出的其他 3 个选项的执行结果可能完全相同,我只会使用 values.Contains(value);
,因为这是最简单的选择。
如果您想检查 int[] 数组中是否存在一个 int 值,最多包含 1000000 个项目,那么最有效的方法是什么并最大限度地减少 CPU 周期?
int[] values = {1, 2, 3, 4};
value = 4
我知道使用 for 循环或类似这样的东西:
values.Contains(value);
Array.Exists(values , i => i==value );
Array.IndexOf(values, value) != -1;
算法:
如果范围小于10个元素,迭代直到找到元素。
否则找到数组的中间元素并将其与您的值进行比较。
取决于比较结果 select 新范围(前半部分或后半部分)并递归 运行 步骤 1。
因为您的数组已排序,所以最好的方法是使用 BinarySearch
方法。
bool IsInArray(int[] values, int value)
{
var index = Array.BinarySearch(values, value);
return (index >= 0);
}
如果数组未排序,那么您列出的其他 3 个选项的执行结果可能完全相同,我只会使用 values.Contains(value);
,因为这是最简单的选择。