如何从数组中查找最接近500的数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从数组中查找最接近500的数字相关的知识,希望对你有一定的参考价值。

前提:有序数组。如果为无序数组,要么先排序,要么遍历。

    这儿查找最接近0的下标,同样的你可以查找离500最近的下标,然后查找到该数

    python语言(二分法查找)

            li = [-5,-3,-1,2,3,6,7]
            
            def func(li):
                if li[0]>=0:
                    print("下标为0")
                    return
                left,right = 0,len(li)-1

                while left <= right:
                    mid = (left+right)//2
                    if li[mid]<0:
                        left = mid+1
                    elif li[mid]>0:
                        right = mid-1
                    else:
                        print('有相等元素,最近下标为',mid)
                        return
                print(left,right)
                # 如果没有相等元素,最后left>right,且left=right+1
                if li[left]-0 > 0-li[right]:
                    print("没有相等,最近下标为",right)
                    return
                else:
                    print('没有相等,最近下标为',left)
                    return 
                    
            func(li)

参考技术A 如果没有排序,就土一点,扫描一遍所有值。加个变量记录最差距和最差距所在位置。
如果已经排序,可以二分查找,速度快。
private float getNear(float[] array, float target)

if (array.Length == 0) return -1;
if (array.Length == 1) return 0;

int min = 0;
int max = array.Length - 1;
int mid = (int)(min + max) / 2;

while (max - min > 1 )

if (target == array[mid] ) return mid;
if (target < array[mid]) max = mid;
if (target > array[mid]) min = mid;
mid = (int)(min + max) / 2;

return array[max] - target < target - array[min] ? max : min;
参考技术B 循环就好了,这是最简单的算法。例如数组a为待处理数组。
int* b = (int*)malloc(n*sizeof(int));
for(int i = 0;i < n;i++)

for(int j = 0;j < m;j++)

if(a[n]==b[j])
b[j]++;

if(j==m)
b[m] = 1;
m++;

如果需要知道重复的数字是什么,则b定义为结构体数组
struct record

int data,
int count
;

如何找到最接近某个数字的数组元素? [复制]

【中文标题】如何找到最接近某个数字的数组元素? [复制]【英文标题】:How can I locate the element of an array that is nearest to some number? [duplicate] 【发布时间】:2015-08-13 15:29:25 【问题描述】:

我有一个数组A,例如

A = [-79.0732  -82.1919  -85.0432  -87.0406  -90.0102  -92.6745]

还有一些数字x(例如-90),我想找到数组中最接近(绝对值)x的元素的索引。

在我的示例中,A 中与x 最接近的元素是-90.0102,即数组A 的第5 个元素。一般来说,我如何计算最接近x 的元素的索引?

【问题讨论】:

@rayreng 道歉。我应该先检查是否有骗子。 @Jubobs - 没问题 :) 有时回答比找到重复项更快......例如这个例子:***.com/questions/31992090/… - 我们已经看到 许多 问题,例如这个,但不能确定一个足够好的副本。如果我处于您的情况,如果我不知道有合适的副本,我也会回答。 FWIW,我赞成你的回答。 【参考方案1】:

如果x 是感兴趣的值,A 是数组,则运行

[~, inearest] = min(abs(A - x));

那么inearest 将包含数组A 中最接近x 的元素的索引(绝对值)。

【讨论】:

【参考方案2】:

我认为应该这样做:

[~, i] = min(abs(A - (-90)));

这会将A 中每个元素的差异与您提供的数字相乘。 min 然后会找到最小值,并返回它的索引。

【讨论】:

是的,如果我添加 abs 就可以了。所以如果它变成: [~, i] = min(abs(A - (-90)));第一部分返回值(不需要),我返回位置。谢谢 @Matt 编辑后,您的答案正文不再匹配代码:绝对值~= 差异。

以上是关于如何从数组中查找最接近500的数字的主要内容,如果未能解决你的问题,请参考以下文章

在数组中查找三个元素之和最接近给定数字

C++:查找数组中最接近的值

如何在目标上方的数组中找到最接近的数字?

在数组中查找匹配或最接近的值

排序加二分查找解题

二分查找算法应用总结