- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个包含大约 500,000 个整数的排序数组。目前,我通过获取目标 int 与所有元素之间的差异来选择正确的索引,然后使用 LINQ 按最小差异进行排序(效率非常低)。
我希望能够用 BinarySearch 做一些非常相似的事情。
给定:
Pos Value
0 10
1 20
2 30
4 50
5 60
如果我想为值 24 找到最接近的值,我希望返回的索引为 1。
给定:
int index = myArray.BinarySearch(values, 24);
if (index < 0)
index = ~index;
这将返回 2,因为它给出了行中的下一个元素,而不是最近的元素。是否可以编写一个 IComparer 来返回最接近的索引?
给定值:
Value ExpectedReturn
20 1
24 1
25 2
26 2
30 2
我正在努力使它尽可能快。到目前为止,我在 LINQ 中所做的一切都低于我认为通过出色的二分搜索可以实现的目标。感谢您的输入。
最佳答案
只需进行二分查找,如果结果是否定的,您就会找到它要插入的位置并查看下一个和上一个条目 - 换句话说,使用您当前的代码,检查 index
和 index - 1
(在检查 index
不是 0 之后:)。找出哪个更近,您就完成了。
关于c# - 使用 BinarySearch 通过差异查找最接近的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306094/
我正在尝试将一个旧项目从使用 ArrayList 集合升级到 List。除了转换 ArrayList.BinarySearch 之外,一切都非常顺利。虽然 List 有相应的方法,但 ArrayLis
问题 我想自己在 Klant 的对象上实现 BinarySearch 方法,我该怎么做?Klant 有一些变量。 public class Klant { public String klantID;
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 5年前关闭。 我是 java 的新程序员,我正在尝试使用 binarySearch
我正在尝试在 F# 中实现一个简单的二进制搜索,作为学习函数式编程的一种方式。我已经在我的主要语言 C# 中以命令式方式实现了它,但我认为通过在 F# 中以递归方式实现它,这将是一个很好的挑战,也是学
我有三个长度为 9 的字符串数组,我想看看它们是否都包含相同的名称。我必须在线性时间 O(NlogN) 内完成此操作。我的计划是对两个数组进行排序,然后使用二进制搜索来查找相似的名称。我的代码就像这样
我使用 xpath 从 xml 文件中填充了一个排序的日期列表(以 dd/mm/yyyy 格式存储为字符串)。 然而,当查询列表以查看列表中是否存在某个日期时,我总是得到否定结果(即不存在),即使我已
我正在开发一个 Java 项目 BinarySearch。我正在尝试创建并初始化一个变量 mid ,它将找出中间值,但它给我一个错误,你不能在这里声明一个变量。我也用 split 声明尝试过,但没有用
我是一名 Java 初学者,我正在尝试编写二进制搜索算法的实现代码。 这是我的代码: protected int doSearch(List list, int key) throws Sea
所以基本上,我知道对有序列表执行二进制搜索只是为了它起作用,所以这是我正在使用的列表: Integer[] x = {1, 2, 3, 4, 5, 6}; 所以基本上它可以找到一个整数,但是当我输入一
正如标题所暗示的,我正在编写一些代码来执行 Java 版本的二分搜索。但是,我的返回语句被忽略,函数反而返回最后一个“捕获所有”返回语句,如下所示: public int binarySear
我应该如何使用二进制搜索来查找排序数组中相邻数字之间的距离是否大于 N?例如: Input: 2 5 8 11 16 Distance: 4 所以我们应该得到邻居之间有这样的距离的答案。 (11 到
所以我想写一个代码来返回键所在的索引,或者如果它不存在,它应该在哪里。我错过了什么?min 为 0,max 为 size - 1,buf 已排序 int binarySearch(string buf
当我尝试编写以下行时: int foundIndex = Collections.binarySearch(keys, key); 它显示错误:参数化方法binarySearch(List>, K)类
function binarySearch(items, target){ var startIndex = 0, stopIndex = items.length-1, middle = Math.
尝试用 Java 编写 Python 风格的 bisect_right,并使用 List 参数的泛型类型: import java.util.*; class Util { /* eqv to
我又遇到了一些关于列表和二进制搜索的问题。一般来说,我有: type TMyArr = array [1..5] of Integer; PMyList = record Com
我正在尝试使用 java.util.Arrays 类的二分搜索(不区分大小写),但它无法搜索指定数组中存在的字符串。以下是程序: package com.test; import java.util.
这不起作用: List byteArrayList = .... ; Collections.binarySearch(byteArrayList, new ByteArrayComparator()
嗨,我正在制作一个程序,该程序采用一系列“术语”,每个术语都有自己的权重(长值)和查询(字符串值)。它应该从 .txt 文件中获取许多术语并将它们初始化为私有(private)“Terms”数组,然后
我很想知道当我使用 Arrays.binarySearch 而不进行排序时得到的答案背后的逻辑是什么。 int d[]={6,-4,12,0,-10}; int x=12; int y=Arrays.
我是一名优秀的程序员,十分优秀!