【问题标题】:Judgecode -- Array PrefixJudgecode——数组前缀
【发布时间】:2017-05-05 16:09:36
【问题描述】:

我看到的问题如下,有人对此有什么想法吗?

http://judgecode.com/problems/1002

给定一个由 N 个整数组成的非空数组 A,请找出最小的整数 P,使得 A 中的所有数字都在子数组 A[0..P] 中。

【问题讨论】:

  • 看,这些谜题背后的想法是你自己解决它们。要求答案有点违背谜题的目的,不是吗?

标签: algorithm data-structures jobs


【解决方案1】:

由于要扫描数组的所有项,所以至少要实现O(N)算法。我建议在添加散列集时扫描数组,当散列集大小增加时(即添加了一个唯一项),记住该项的索引。返回最后记忆的索引

C# 实现:

private static int MinIndex(IEnumerable<int> source) {
  HashSet<int> used = new HashSet<int>();

  int index = -1;
  int result = -1;

  foreach (int item in source) {
    index += 1;

    if (used.Add(item)) // unique item added
      result = index;   // the last unique item's index so far
  }

  return result;
}

测试

int[] sample = new [] { 2, 2, 1, 0, 1, }; 

Console.Write(MinIndex(sample)); 

结果是3:初始数组{0, 1, 2}的所有不同项都在子数组[0..3]中,即[2, 2, 1, 0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2014-10-13
    • 2012-02-01
    • 2021-05-29
    • 2018-05-30
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多