你如何在C#中检索数组中元素的最后一次重复索引?
例如,您有:int[] array = { 3, 5, 7, 8, 3, 4, 3 , 9 };
你正在寻找 元件 3最后重复的索引是6。
这是我找到第一次重复的原因:
public static int Search(int[] array, int value)
{
for (int i = 0; i < array.Length; i++)
{
if (value == array[i])
{
return i;
}
}
return -1;
}
PS:我不能使用任何功能或方法。我被允许只使用数组。
答案 0 :(得分:4)
尝试从后面搜索。如果从数组的第一个元素进行搜索,则肯定需要搜索直到数组的末尾。如果从后面搜索,则可以在找到后立即返回该值。
public static int search(int lem, int[] a)
{
for (int i = a.Length - 1; i >= 0; i--)
{
if (lem == a[i])
{
return i;
}
}
return -1;
}
答案 1 :(得分:1)
你的问题很模糊。如果您正在寻找任何重复的(不是必需的3
),我建议您使用HashSet<int>
(C#实施):
int[] array = { 3, 5, 7, 8, 3, 4, 3, 9 };
HashSet<int> used = new HashSet<int>();
int last = -1;
for (int i = 0; i < array.Length; ++i)
if (!used.Add(array[i])) // failed to add to the set, array[i] is a duplicate
last = i;
Console.Write(last);
如果您仅查找3
的最后次,请尝试向后循环 :
int last = -1;
for (int i = array.Length - 1; i >= 0; --i)
if (array[i] == 3) {
last = i;
break;
}
答案 2 :(得分:0)
如果你知道如何找到第一次重复,为什么不使用array.Reverse()
,使用已知的algorythm,然后减去找到的值array.Length
?
但是如果你只想要一个方法调用,你可以修改你的解决方案,在它完成循环数组之前不返回值:
public static int search(int lem, int[] a)
{
int j = -1;
for (int i = 0; i < a.Length; i++)
{
if (lem == a[i])
{
j = i;
}
}
return j;
}
答案 3 :(得分:0)
尝试这种通用方法:
public static int FindLast<T>(T[] array, T value)
where T : IEquatable<T>
{
for (int i = array.Length - 1; i >= 0; i--)
{
if (array[i].Equals(value))
{
return i;
}
}
return -1;
}