【问题标题】:Finding the last repetition index of element in array查找数组中元素的最后一个重复索引
【发布时间】:2017-03-11 20:10:29
【问题描述】:

你如何在 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:我不能使用任何函数或方法。我只能使用数组。

【问题讨论】:

  • 到目前为止你尝试过什么?不要指望 SO 能解决你的作业......
  • 我知道找到元素的第一个重复索引,但不知道如何找到最后一个。
  • 如果你有第一个解决方案,那么你有一个最后一个解决方案,如果你反转数组......
  • 上面的 j=i 是什么意思???
  • 没有功能?提示您不必循环计数,也可以倒数。

标签: c# arrays loops


【解决方案1】:

尝试从后面搜索。如果从数组的第一个元素开始搜索,则肯定需要搜索到数组的末尾。如果从后面搜索,找到后直接返回值。

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; 
}

【讨论】:

    【解决方案2】:

    您的问题含糊不清。如果您正在寻找任何重复项(不需要3),我建议您使用HashSet&lt;int&gt;(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;
         } 
    

    【讨论】:

    • 这是否可以不使用任何功能,因为我只能使用数组。
    • 我无法使用 LINQ 和任何其他功能。
    【解决方案3】:

    如果你知道如何找到第一个重复,为什么不使用array.Reverse(),使用已知算法,然后从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; 
    }
    

    【讨论】:

    • 我不能使用任何功能。
    • @Slasher 我修改了不使用函数的解决方案
    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2017-12-01
    • 2022-01-03
    相关资源
    最近更新 更多