如何从数组中查找最接近500的数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从数组中查找最接近500的数字相关的知识,希望对你有一定的参考价值。
前提:有序数组。如果为无序数组,要么先排序,要么遍历。
这儿查找最接近0的下标,同样的你可以查找离500最近的下标,然后查找到该数
python语言(二分法查找)
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)
如果已经排序,可以二分查找,速度快。
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的数字的主要内容,如果未能解决你的问题,请参考以下文章