所以这是一个问题,我给了一个整数数组,它的数字都是不同的,假设它是
int[] data = {21, 34, 12, 88, 54, 73};
Run Code Online (Sandbox Code Playgroud)
现在我想看看子数组或范围是否包含一个范围内的数字(也给出了)。换句话说,我想查看数组的某个范围是否包含某个范围内的数字。例如,如果我有一个函数,check(int a, int b, int l, int r)其中a和b是数组的范围,l并且r是数字的范围。
因此,对于上面的数组,check(0, 2, 20, 50)应该返回true,因为 from index = 0 to 2,有21, 34, 12,并且有两个数字 ,21, 34在 的范围内20 to 50。
所以另一个例子是应该check(2, 3, 20, 80)返回,false因为 ,12, 88没有 20, 80 范围内的数字。
我正在考虑使用线段树,因为据我所知,RMQ(范围最小查询)可以通过使用线段树来解决,因此我认为线段树也可以解决这个问题;"get" function然而,线段树的全部都是"single"(也许不是最好的词),所以,我想知道线段树应该保存哪些节点。是否有任何算法可以回答每个查询,而O(log(n))不是"build" …
为什么多重集是一个集合而一个集合只能包含不同的元素,而多重集可以包含相同的元素?它可以被称为sortedArray或sortedList。即使它只是想要一个排序的“集合”,为什么它是一个集合?