我接受了采访,并且有以下问题:
在不到O(n)的时间内从排序数组中查找唯一数字。
Ex: 1 1 1 5 5 5 9 10 10 Output: 1 5 9 10
我给出了解决方案,但这是O(n)的。
编辑: 排序后的数组大小约为200亿,唯一数约为1000。
分而治之 :
data[0]..data[data.length-1]
)。一般情况下解决 O(log(n)) ,仅在最坏情况下解决O(n)(当每个元素不同时)。
Java代码:
public static List<Integer> findUniqueNumbers(int[] data) {
List<Integer> result = new LinkedList<Integer>();
findUniqueNumbers(data, 0, data.length - 1, result, false);
return result;
}
private static void findUniqueNumbers(int[] data, int i1, int i2, List<Integer> result, boolean skipFirst) {
int a = data[i1];
int b = data[i2];
// homogenous sequence a...a
if (a == b) {
if (!skipFirst) {
result.add(a);
}
}
else {
//divide & conquer
int i3 = (i1 + i2) / 2;
findUniqueNumbers(data, i1, i3, result, skipFirst);
findUniqueNumbers(data, i3 + 1, i2, result, data[i3] == data[i3 + 1]);
}
}
我在Java编码,我需要一个排序的整数数据结构,它有最大的O(log(n))插入时间和O(1)按索引查找。是否有一个内置的数据结构可以做到这一点,或者如果没有,我如何自己编程一个? 我知道集合可以完成第一个任务,但要查找元素I,我需要在元素I之前遍历所有元素。
问题内容: 如果我有一个PHP数组: 带有值: 我有一个变量: 如何返回值?: 因为那是数组中最接近38(递增)的值? 问候, 泰勒 问题答案:
对cs来说很新鲜...在一次演讲的结尾,我的AP计算机科学老师提到在排序数组中找到指定值的比较模型是“大欧米茄(log n)”,我的理解是,这意味着完成这个任务的速度不可能比O(log n)快?你能帮我弄明白为什么吗?谢谢你!
求一个未排序数组的中值,我们可以对n个元素做O(nlogn)时间的min-heap,然后我们可以逐个抽取n/2个元素得到中值。但是这种方法需要O(nlogn)时间。 我们能在O(n)时间内通过某种方法做同样的事情吗?如果可以,那么请告诉或建议一些方法。
我试图写一个算法,它需要可变数量的通用数组,存储在中,并收集其中所有唯一的元素(元素只发生一次),并将其存储在一个数组中,称为。例如,数组: 将生成包含内容的数组。 以下是我当前的流程算法: 请注意,是一个数组,它包含