Java 采访Q:数组的查找模式
我最近参加了一次面试,面试官问了我以下问题:Java 采访Q:数组的查找模式,java,c++,arrays,algorithm,Java,C++,Arrays,Algorithm,我最近参加了一次面试,面试官问了我以下问题: 给定一个未排序的数组,如何计算O(N)中的模式? 我的回答是使用hashmap、O(N)循环数组和O(1)查找 然后他说 如果您必须使用固定内存,但允许有更多的处理器时间,您将如何做到这一点? 我回答“对数组排序并找到最长的运行时间,runtime=O(nlgn) 他问的下一个问题把我搞砸了 如果你必须使用恒定内存和线性时间,你会怎么做? 我不知道如何回答这个问题,他把这个留给了我,作为以后的练习。已经好几天了,我还是不知道怎么做 有人知道怎么做吗?
给定一个未排序的数组,如何计算O(N)中的模式?
我的回答是使用hashmap、O(N)循环数组和O(1)查找
然后他说
如果您必须使用固定内存,但允许有更多的处理器时间,您将如何做到这一点?
我回答“对数组排序并找到最长的运行时间,runtime=O(nlgn)
他问的下一个问题把我搞砸了
如果你必须使用恒定内存和线性时间,你会怎么做?
我不知道如何回答这个问题,他把这个留给了我,作为以后的练习。已经好几天了,我还是不知道怎么做
有人知道怎么做吗?>如果数字在合理范围内,您可以使用具有值范围大小的数组线性计算模式 数组中的值将是模式数组的索引。增加值。保留另外两个频率最高的变量和频率最高的值的索引
#include <stdio>
int main(void)
{
unsigned int frequencies[11] = {0}; // Assume range 1..10, inclusive.
const unsigned int values[] =
{1, 8, 4, 8, 7, 3, 2, 8, 5};
const unsigned int value_quantity =
sizeof(values) / sizeof(values[0]);
unsigned int greatest_frequency = 0;
unsigned int value_of_greatest_frequency = 0;
for (unsigned int i = 0; i < value_quantity; ++i)
{
// Calculate new frequency.
const unsigned int frequency_index = values[i];
++frequencies[frequency_index];
// Update "running" variables
if (frequencies[frequency_index] > greatest_frequency)
{
greatest_frequency = frequencies[frequency_index];
value_of_greatest_frequency = frequency_index;
}
}
std::cout << "Mode is " << value_of_greatest_frequency
<< ", with frequency of " << greatest_frequency
<< "\n";
return 0;
}
#包括
内部主(空)
{
无符号整数频率[11]={0};//假设范围为1..10,包括1..10。
常量无符号整数值[]=
{1, 8, 4, 8, 7, 3, 2, 8, 5};
常量无符号整数值\u数量=
sizeof(值)/sizeof(值[0]);
无符号整数最大_频率=0;
最大频率的无符号整数值=0;
for(无符号整数i=0;i最大频率)
{
最大频率=频率[频率指数];
最大频率的值=频率指数;
}
}
std::cout你怎么能在恒定内存中对数组进行排序?恒定内存意味着项目不能移动。你要么制作一个副本并对副本进行排序,要么使用一个指针数组并按其目标值对指针数组进行排序。+1表示“抱歉”必须是:-)@ThomasMatthews当有人说排序算法使用常量o对于内存,这意味着算法引入了恒定的内存开销,但显然存储数组的是O(n)。也就是说,如何比较快速排序和合并排序?众所周知,快速排序使用O(1)内存和合并排序O(n),因此使用O(1)内存对数组进行排序(具有相关定义)绝对有可能,除非宇宙的大小(最大整数大小),否则这可能无法实现被认为是常量。如果是,您可以使用这里给出的解决方案:@Dici:requirements说常量内存
,我理解它是只读内存或内存中的值不能更改。那么这与user3735521的hashmap解决方案不一样吗?不,略有不同。我没有使用哈希
。我的理解是是散列是将函数应用于索引值的结果,我还没有这样做。