Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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树集中最接近的前k个元素?_Java_Treeset - Fatal编程技术网

如何获取Java树集中最接近的前k个元素?

如何获取Java树集中最接近的前k个元素?,java,treeset,Java,Treeset,假设我有这个树集: 我想要顶部的k个元素与输入的数字x个元素最接近 例如,使用k=3和x=5我想得到: 463 有什么方法可以做到这一点吗?似乎您需要做的是,对于所有小于目标元素的元素,获得a,对于较大的元素,获得a。现在,算法将有点类似于合并排序的合并阶段 在耳机上取一个耳罩,在机尾上取一个耳罩。称之为c\u desc,和c\u asc 检查两个元素中哪一个更接近目标值x。取此值并推进迭代器 注意其中一个迭代器何时位于相应集合视图的末尾 继续执行此操作,直到您获取了k元素 似乎您需要做的是,

假设我有这个
树集

我想要顶部的k个元素与输入的数字x个元素最接近

例如,使用
k=3
x=5
我想得到:

463


有什么方法可以做到这一点吗?

似乎您需要做的是,对于所有小于目标元素的元素,获得a,对于较大的元素,获得a。现在,算法将有点类似于合并排序的合并阶段

  • 在耳机上取一个耳罩,在机尾上取一个耳罩。称之为
    c\u desc
    ,和
    c\u asc
  • 检查两个元素中哪一个更接近目标值
    x
    。取此值并推进迭代器
  • 注意其中一个迭代器何时位于相应集合视图的末尾
  • 继续执行此操作,直到您获取了
    k
    元素

似乎您需要做的是,对于所有小于目标元素的元素,都获得a,对于较大的元素,则获得a。现在,算法将有点类似于合并排序的合并阶段

  • 在耳机上取一个耳罩,在机尾上取一个耳罩。称之为
    c\u desc
    ,和
    c\u asc
  • 检查两个元素中哪一个更接近目标值
    x
    。取此值并推进迭代器
  • 注意其中一个迭代器何时位于相应集合视图的末尾
  • 继续执行此操作,直到您获取了
    k
    元素
通过“最接近x”,我假设您指的是
abs(n-x)
的最低值

也就是说,对于x=5,k=3:

1,3,4,6,8,9,10   -> 3,4,6
3,4,5,10,11,12   -> 3,4,5
0,1,2,5,6,7,8    -> 5,6,7
如果是这样,我会:

  • 将每个
    整数
    映射到
    • n->新对(n,abs(n-x))
      因此一个值是
      n
      ,另一个值是它与
      x的距离
      
    • (编写您自己的
      ,(ab)使用
      映射。条目
      ,(ab)使用
      整数[2]
      或在库中查找)
  • 使用使用距离的比较器对
    对的列表进行排序
  • 从排序列表中选取第一个
    k
    元素
使用Java 8流:

 set.stream()
   .map( n -> new Pair(n, Math.abs(x - n)))
   .sorted(Comparator.comparing( p -> p.right())
   .limit(k)
   .map( p -> p.left())
   .collect(Collectors.toSet());
“最接近x”我假设你指的是
abs(n-x)
的最低值

也就是说,对于x=5,k=3:

1,3,4,6,8,9,10   -> 3,4,6
3,4,5,10,11,12   -> 3,4,5
0,1,2,5,6,7,8    -> 5,6,7
如果是这样,我会:

  • 将每个
    整数
    映射到
    • n->新对(n,abs(n-x))
      因此一个值是
      n
      ,另一个值是它与
      x的距离
      
    • (编写您自己的
      ,(ab)使用
      映射。条目
      ,(ab)使用
      整数[2]
      或在库中查找)
  • 使用使用距离的比较器对
    对的列表进行排序
  • 从排序列表中选取第一个
    k
    元素
使用Java 8流:

 set.stream()
   .map( n -> new Pair(n, Math.abs(x - n)))
   .sorted(Comparator.comparing( p -> p.right())
   .limit(k)
   .map( p -> p.left())
   .collect(Collectors.toSet());

“有没有办法做到这一点?”是的。写一个这样做的方法。如果您的意思是“TreeSet中是否有一种方法可以实现此功能?”,答案是否定的。此外,如果您计划自己实现此功能(您可能必须这样做),则需要定义某些情况。如果
k
大于集合的大小,会发生什么情况?如果
x
不在集合中,会发生什么情况?如果两个元素的距离最近,会发生什么情况?“有没有办法做到这一点?”是的。写一个这样做的方法。如果您的意思是“TreeSet中是否有一种方法可以实现此功能?”,答案是否定的。此外,如果您计划自己实现此功能(您可能必须这样做),则需要定义某些情况。如果
k
大于集合的大小,会发生什么情况?如果
x
不在集合中,会发生什么情况?如果两个元素并列为最接近的,会发生什么?我没有为OP做任何工作,只是指向适当的函数。通过研究我所指的相关文档,将其转化为实际实现仍然需要OP来完成。@lucasvw Giving pointers完全被接受。见鬼,你甚至在对这个问题的第二次评论中给出了一些!“照我说的做,而不是照我做的做”?这似乎是一个家庭作业问题的合理细节。请参阅:“您可以先使用伪代码…”。那又怎样?行为得当,在问题上打上标记,不要责骂回答者。@OlivierGrégoire我不相信我责骂过任何人,但如果我责骂过,我会很高兴道歉。我只是表达了我的观点。我没有为OP做任何工作,只是指出了适当的功能。通过研究我所指的相关文档,将其转化为实际实现仍然需要OP来完成。@lucasvw Giving pointers完全被接受。见鬼,你甚至在对这个问题的第二次评论中给出了一些!“照我说的做,而不是照我做的做”?这似乎是一个家庭作业问题的合理细节。请参阅:“您可以先使用伪代码…”。那又怎样?行为得当,在问题上打上标记,不要责骂回答者。@OlivierGrégoire我不相信我责骂过任何人,但如果我责骂过,我会很高兴道歉。我只是表达了我的意见