Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 在这种情况下,如何从数组中获取N个唯一的项。。。。? 总结_Java_Algorithm_Dictionary_Heap - Fatal编程技术网

Java 在这种情况下,如何从数组中获取N个唯一的项。。。。? 总结

Java 在这种情况下,如何从数组中获取N个唯一的项。。。。? 总结,java,algorithm,dictionary,heap,Java,Algorithm,Dictionary,Heap,这两天来,我一直在试图帮助某人解决这个问题,虽然我可以使用嵌套for循环强制执行它,但我正在尝试将它简化为两个非嵌套循环 以下是条件: 使用映射存储项的第一次外观索引和数组中的外观数 方法的调用方必须能够指定要获取的前N个唯一元素 不允许有超过2个循环,而且它们应该不嵌套 我的尝试 public void getHeapUnique(E[]数组,int n){ Map Map=newhashmap(); PriorityQueue heap=new PriorityQueue(); 整数计

这两天来,我一直在试图帮助某人解决这个问题,虽然我可以使用嵌套for循环强制执行它,但我正在尝试将它简化为两个非嵌套循环

以下是条件:

  • 使用映射存储项的第一次外观索引和数组中的外观数
  • 方法的调用方必须能够指定要获取的前N个唯一元素
  • 不允许有超过2个循环,而且它们应该嵌套
我的尝试
public void getHeapUnique(E[]数组,int n){
Map Map=newhashmap();
PriorityQueue heap=new PriorityQueue();
整数计数=0;
布尔唯一=真;
for(int i=0;i
问题
因此,我相信堆数据结构可能是简化或提供我不知道的行为的关键,而这些行为将解开这个谜团。实现堆会提供我不知道的特殊能力吗

我特别被告知在地图中存储第一次出现的数字索引和出现的数字。我还被告知不要在数组上循环,而是在映射上循环。我这样做没有问题,但我的问题是,我只能想象一种确定项目 如果使用嵌套循环检查贴图关键帧集中的每个关键帧,则已出现:

...
for (int i  = 0; i < arr.length;i++)
{
   boolean unique = true;

   for (Integer index : map.keySet())
   {
      if (arr[i] == arr[index])
      {
          unique = false;
          int incr = map.get(index) + 1;
          map.put(index, incr);
          break;
      }
   }

   if (unique)
   {
      map.put(i, 1);
      count++;
      if (count == n)
      {
         break;
      }
   }
}
...
。。。
对于(int i=0;i
我错过了什么

...
for (int i  = 0; i < arr.length;i++)
{
   boolean unique = true;

   for (Integer index : map.keySet())
   {
      if (arr[i] == arr[index])
      {
          unique = false;
          int incr = map.get(index) + 1;
          map.put(index, incr);
          break;
      }
   }

   if (unique)
   {
      map.put(i, 1);
      count++;
      if (count == n)
      {
         break;
      }
   }
}
...