每个词的出现次数

时间:2019-08-05 08:23:50

标签: arrays algorithm

我得到了一个数组a[n][2],其中n的最大值为10^5。有n个科目和n个学生。全部编号为1、2,...,n。

a[i][0]a[i][1]1 <= i <= n)表示在第i个科目中,从a[i][0]a[i][1]的所有学生都通过了考试,其余的则没有通过t。我应该找到每个学生通过的科目数量。

例如,

n=5 and a = [ [1,3], [1,3], [1,5], [1,5], [1,5] ] 

应提供输出

[5, 5, 5, 3, 3]

(2)

n = 10, a = [ [1,10], [1,10], [1,10], [3,5], [1,10], ..., [1,10] ]

预期答案应该是

[ 9, 9, 10, 10, 10, 9, 9, 9, 9, 9]

1 个答案:

答案 0 :(得分:2)

不是很了解您的代码,这是另一种方法。 这类似于间隔问题。让我们举个例子:

  • n = 5
  • a = [[1,3],[1,3],[1,5],[1,5],[1,5]]

我们首先将尺寸数组设为no。的主题数+ 1(为了简化计算)。

1   2   3   4   5   6
  • 现在,让我们一个接一个地进行检查。每当遇到间隔时,我们将+1添加到起点,并将-1添加到终点+ 1 th 位置。

数组表示形式:(在上述整个过程之后)。

 1          2          3          4         5         6

+1                               -1                           [1,3]
+1                               -1                           [1,3]
+1                                                   -1       [1,5]
+1                                                   -1       [1,5]
+1                                                   -1       [1,5]
  • 所有待决事项就是从左至右开始求和,您会得到每个学生的答案。上面的过程之所以有效,是因为我们在每个时间间隔的最后一个学生之后否定了(如-1一样),因为其他学生没有通过该特定主题。因此,求和时,我们一定会为每个学生得出正确的总数。

总结如下:

 1          2          3          4         5         6

+1                               -1                           [1,3]
+1                               -1                           [1,3]
+1                                                   -1       [1,5]
+1                                                   -1       [1,5]
+1                                                   -1       [1,5]

 5          5          5          3         3         0(not considered anyway)