问题描述
我得到了一个数组 a [n] [2]
,其中 n
可以为<$ c最多$ c> 10 ^ 5 有n个科目和n个学生。全部编号为1,2,...,n。
I'm given an array a[n][2]
, where n
can be 10^5
at max. There are n subjects and n students. All numbered 1, 2, ..., n.
a [i] [0]
和 a [i] [1]
( 1< = i< = n
)表示在第i个主题中,从 a [i] [0]
到 a [i] [1]
的所有学生都通过了,其余的则没有没错我应该找到每个学生通过的科目数量。
a[i][0]
and a[i][1]
(1 <= i <= n
) denote that in i-th subject, all students from a[i][0]
to a[i][1]
passed, while the rest didn't. I'm supposed to find the number of subjects each student passed in.
例如,
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]
推荐答案
不是很了解您的代码,这是另一种方法。
这类似于间隔问题。让我们举个例子:
Didn't quite understand your code, here is an alternative approach.This is similar to an interval problem. Let's take your example:
- n = 5
- a = [[1,3], [1,3],[1,5],[1,5],[1,5]]
我们首先大小为no的数组。的主题数+ 1(为了简化计算)。
We first make an array of size as no. of subjects + 1 (for the sake of simplicity in computation).
1 2 3 4 5 6
- 现在,让我们一个一个地讲一下。每当遇到间隔时,我们将
+1
添加到起点,并将-1
添加到终点+ 1 位置。 - Now, let's go through intervals one by one. Whenever we come across an interval, we add
+1
to the starting point and-1
to the ending point + 1 location.
数组表示形式:(经过上述整个过程) 。
Array representation:(after the entire above process).
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)
这篇关于每个词的出现次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!