在列表中找到与给定数字最接近的较小和较大值的最佳方法是什么

苏里亚·普拉塔普(Surya Pratap)

我有一个随机数字列表,说1,8,13,20,25,32,50,55,64,70现在给定一个数字说35,所需的较小值将是32而较大值将是50。

我尝试执行此操作的方法是迭代所有值


        var value = 35;
        var list = new List<int> { 1, 8, 13, 20, 25, 32, 50, 55, 64, 70 };

        var lesser = list.First();
        var greater = list.Last();
        foreach (var curr in list)
        {
            if (curr >= value)
            {
                greater = curr;
                break;
            }
            lesser = curr;
        }

        Console.WriteLine("Lesser Value :{0}\tGreater Value:{1}", lesser, greater);

现在,我问这个问题的原因是,我需要针对一次生成列表然后多次请求值的情况进行优化。遍历每个请求的列表似乎是个坏主意。


更新

问题没有指定如果我们获得完全匹配,则需要什么,在这种情况下,我需要将上下限作为匹配的元素,即,在上面的列表中,32应该返回32作为较小的值,而32应该返回较大的值。

修改后的反映出来的答案是:

int value = 32;
int[] list = new[] { 1, 8, 13, 20, 25, 32, 50, 55, 64, 70 };
int? floor = null;
int? ceil = null;
int index = Array.BinarySearch(list, value);
if (index >= 0) // element is found
{
    floor = ceil =list[index] ;
}
else
{
    index = ~index;
    if (index == list.Length)
    {
        ceil = floor = list[index-1];   
    }
    else
    {
        ceil = list[index];
        floor = list[((index==0)?index: index-1)];
    }
}
Console.WriteLine("floor = {0}", floor);
Console.WriteLine("ceil = {0}", ceil);
乌鲁格贝克·乌米罗夫
int value = 35;
int[] list = new[] { 1, 8, 13, 20, 25, 32, 50, 55, 64, 70 };
int? floor = null;
int? ceil = null;
int index = Array.BinarySearch(list, value);
if (index >= 0) // element is found
{
    if (index > 0)
        floor = list[index - 1];
    if (index < list.Length - 1)
        ceil = list[index + 1];
}
else
{
    index = ~index;
    if (index < list.Length)
        ceil = list[index];
    if (index > 0)
        floor = list[index - 1];
}
Console.WriteLine("floor = {0}", floor);
Console.WriteLine("ceil = {0}", ceil);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

找到与预期列表最接近的列表的最佳方法是什么?

来自分类Dev

如何在数组中找到最接近给定数字的值?

来自分类Dev

在Matlab中找到最接近的较小值

来自分类Dev

在排序列表中找到最接近/最接近的值

来自分类Dev

在python列表中找到最接近的值对

来自分类Dev

python在列表中找到最接近的值

来自分类Dev

从文件bash中找到与给定值最接近的值

来自分类Dev

如何从列表中找到最接近给定Rect的Rect?

来自分类Dev

获取列表中某个给定数字的 3 个最接近的值?

来自分类Dev

从列中找到最接近的值,并从相邻列中返回数字(在列表内)

来自分类Dev

在大于给定数字的数字列表中找到元素的最佳总和

来自分类Dev

如何在 Python 中找到最接近数字的值?

来自分类Dev

排序最接近给定数字的数字

来自分类Dev

找到另一个NSPoint最接近哪个NSPoint的最佳方法是什么?

来自分类Dev

熊猫在给定值列表的情况下在数据框列中找到最接近值的索引

来自分类Dev

如何找出总和最接近给定数字的给定向量的最佳组合

来自分类Dev

从向量中找到最接近的数字索引

来自分类Dev

如何在距x的距离处找到与给定数字最接近的n个数字?

来自分类Dev

如何在距x的距离处找到与给定数字最接近的n个数字?

来自分类Dev

在列表中找到最接近的点的索引

来自分类Dev

在矩阵Matlab中找到最接近的值

来自分类Dev

在列pandas中找到最接近的值

来自分类Dev

如何使用C中的for循环找到给定数字的最接近素数?

来自分类Dev

如何在Matlab中找到最接近给定时间值的时间值

来自分类Dev

查找与给定数字最接近的k个数字

来自分类Dev

查找与给定数字最接近的数字总和

来自分类Dev

如何找到最接近值列表的值?

来自分类Dev

如何在数组中查找最接近给定数字的值

来自分类Dev

找到仅具有单个设置位并且总和等于给定数字的数字的最佳算法是什么?

Related 相关文章

  1. 1

    找到与预期列表最接近的列表的最佳方法是什么?

  2. 2

    如何在数组中找到最接近给定数字的值?

  3. 3

    在Matlab中找到最接近的较小值

  4. 4

    在排序列表中找到最接近/最接近的值

  5. 5

    在python列表中找到最接近的值对

  6. 6

    python在列表中找到最接近的值

  7. 7

    从文件bash中找到与给定值最接近的值

  8. 8

    如何从列表中找到最接近给定Rect的Rect?

  9. 9

    获取列表中某个给定数字的 3 个最接近的值?

  10. 10

    从列中找到最接近的值,并从相邻列中返回数字(在列表内)

  11. 11

    在大于给定数字的数字列表中找到元素的最佳总和

  12. 12

    如何在 Python 中找到最接近数字的值?

  13. 13

    排序最接近给定数字的数字

  14. 14

    找到另一个NSPoint最接近哪个NSPoint的最佳方法是什么?

  15. 15

    熊猫在给定值列表的情况下在数据框列中找到最接近值的索引

  16. 16

    如何找出总和最接近给定数字的给定向量的最佳组合

  17. 17

    从向量中找到最接近的数字索引

  18. 18

    如何在距x的距离处找到与给定数字最接近的n个数字?

  19. 19

    如何在距x的距离处找到与给定数字最接近的n个数字?

  20. 20

    在列表中找到最接近的点的索引

  21. 21

    在矩阵Matlab中找到最接近的值

  22. 22

    在列pandas中找到最接近的值

  23. 23

    如何使用C中的for循环找到给定数字的最接近素数?

  24. 24

    如何在Matlab中找到最接近给定时间值的时间值

  25. 25

    查找与给定数字最接近的k个数字

  26. 26

    查找与给定数字最接近的数字总和

  27. 27

    如何找到最接近值列表的值?

  28. 28

    如何在数组中查找最接近给定数字的值

  29. 29

    找到仅具有单个设置位并且总和等于给定数字的数字的最佳算法是什么?

热门标签

归档