在一个非降序列中,查找与给定值最接近的元素。 用Java实现
时间: 2023-06-20 11:08:42 浏览: 148
求无序序列每个元素最接近的值代码
可以使用二分查找来解决这个问题,时间复杂度为 O(log n)。
具体思路是,先找到给定值在非降序列中的位置,然后比较该位置的元素和它前一个位置的元素哪个更接近给定值。
下面是 Java 实现代码:
```java
public static int findClosestElement(int[] arr, int target) {
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
// 如果没有找到与给定值相等的元素,则此时 left 指向大于 target 的第一个元素,right 指向小于 target 的最后一个元素
// 比较这两个元素和 target 的差距,返回更接近的那个元素的下标
if (left == 0) {
return 0;
} else if (right == arr.length - 1) {
return right;
} else {
return Math.abs(arr[left] - target) < Math.abs(arr[right] - target) ? left : right;
}
}
```
使用样例:
```java
int[] arr = {1, 2, 4, 7, 10};
int target = 6;
int closestIndex = findClosestElement(arr, target);
System.out.println("与 " + target + " 最接近的元素是 " + arr[closestIndex]);
// 输出:与 6 最接近的元素是 7
```
阅读全文