我想搜索数组中给定整数的索引。如果给定数组中的数字不重复,代码就会起作用,例如,如果我们在int [] array = new int [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
中搜索整数2的索引,但是如果给定的数组是,例如,int [] array = new int [1, 2, 2, 4, 5, 6, 7, 8, 9, 10, 11]
,代码将返回索引2,而不是1。
public static int Bisection(int[] array, int element)
{
int left = 0;
int right = array.Length - 1;
int middle = (left + right) / 2;
while (array[middle] != element)
{
if (array[middle] < element)
{
left = middle + 1;
}
else
{
right = middle - 1;
}
middle = (left + right) / 2;
if (right < left)
{
return -1;
}
}
return middle;
}
所以我的问题是,如果数组中有多个相同的整数,我应该怎么做才能返回整数的最低索引?
答案 0 :(得分:1)
您可以使用LINQ解决此问题。以下代码搜索array
中与element
匹配的第一个号码,返回array
中的索引:
int[] array = { 1, 2, 2, 4, 5, 6, 7, 8, 9, 10, 11 };
int element = 2;
var result = Enumerable.Range(0, array.Length).FirstOrDefault(i => array[i]==element);
如果您希望array
中与element
匹配的所有数字的索引:
var result = Enumerable.Range(0, array.Length).Where(i => array[i]==element).ToArray();
答案 1 :(得分:1)
检查一下:
public static int Bisection(int[] array, int element)
{
int left = 0;
int right = array.Length - 1;
int middle = (left + right) / 2;
while (array[middle] != element || (middle > 0 && array[middle - 1] == element))
{
if (array[middle] < element)
{
left = middle + 1;
}
else
{
right = middle - 1;
}
middle = (left + right) / 2;
if (right < left)
{
return -1;
}
}
return middle;
}
while
条件已更改。