Algorithm 算法问题

Algorithm 算法问题,algorithm,Algorithm,我正在尝试为这个问题找到一个O(n)算法,但即使花了3-4个小时也无法做到。蛮力方法超时(O(n^2))。我不知道该怎么做?该解决方案是否需要动态规划解决方案 简言之,问题在于: 有一些学生围成一圈坐着,他们每个人都有自己的选择,什么时候他想被老师问问题。老师只会按顺时针顺序提问。例如: 5 3 3 1 5 5 这意味着有5名学生和: 1st student wants to go third 2nd student wants to go third 3rd student wants

我正在尝试为这个问题找到一个
O(n)
算法,但即使花了3-4个小时也无法做到。蛮力方法超时
(O(n^2))
。我不知道该怎么做?该解决方案是否需要动态规划解决方案

简言之,问题在于:

有一些学生围成一圈坐着,他们每个人都有自己的选择,什么时候他想被老师问问题。老师只会按顺时针顺序提问。例如:

5

3 3 1 5 5
这意味着有5名学生和:

1st student wants to go third
2nd student wants to go third
3rd student wants to go first
4th student wants to go fifth
5th student wants to go fifth.
问题是,老师应该从哪里开始提问,以便让最多的学生得到他们想要的答案。对于这个特定的例子,答案是5,因为

3 3 1 5 5

2 3 4 5 1
你可以看到,从第五名学生作为第一名开始,两名学生(3和5)得到了他们想要的选择。对于这个例子,答案是第12个学生:

12

5 1 2 3 6 3 8 4 10 3 12 7
因为

5 1 2 3 6 3 8 4 10   3 12 7

2 3 4 5 6 7 8 9 10 11 12 1

四个学生完成了他们的选择。

这实际上是一个相当简单的问题。如果学生k想成为第j个演示者,那么当(k-j+1)个(模n)是第一个演示者时,她会感到满意。这将引导你找到一个简单的O(n)算法。

请将问题包括在内,或者最好在你的问题文本中包含一个问题摘要。每个学生都希望有一个可能的起始位置,“关闭”一文不值。因此,每个学生要求的发言立场可以重新解释为他们想先发言的人的投票。你被要求找到票数最多的先发者。一个更难的问题是,首先要问学生们应该如何安排自己在圆圈中,但当这个问题开始时,这个问题已经解决了:-)最初的描述是n≤ 10⁵. 这使得任何溶液在O(n²)中也在O(10)中⁵⋅n) 因此在O(n).@Oswal-whaaa?通过同样的推导,我们可以说解在O(1)中。一点也不正确。仅仅因为问题限制了N,并不意味着运行时不会随着N的增长而增长。只有当N是一个等于100000的常数时,像你这样的扣减才会成立。即使这样,这也不是一个很实际的推论。@Steve你的“更难”的问题也很琐碎。你可以很容易地安排学生,使每个学生想要的职位都有一个学生得到该职位。但是其他学生的竞争欲望又如何呢?“我认为你把这件事简化得太多了。”“不,我没有。让我告诉你简单的O(n)算法。在列表中迭代一次,累积(i=1:n)sat[i-want[i]+1]++的每个起始位置满足的学生人数,然后找到sat中最大值的索引。