Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 采访Q:数组的查找模式_Java_C++_Arrays_Algorithm - Fatal编程技术网

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解决方案不一样吗?不,略有不同。我没有使用
哈希
。我的理解是是散列是将函数应用于索引值的结果,我还没有这样做。