本关任务:采用二分查找算法实现查找有序数组里大于等于 x 的第一个数字
时间: 2023-12-14 19:32:32 浏览: 282
以下是使用二分查找算法实现查找有序数组里大于等于 x 的第一个数字的Python代码:
```python
def binary_search(arr, x):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] >= x:
if mid == 0 or arr[mid - 1] < x:
return mid
else:
right = mid - 1
else:
left = mid + 1
return -1
```
其中,arr为有序数组,x为要查找的数字。函数返回大于等于x的第一个数字的下标,如果不存在则返回-1。
举个例子,假设有序数组为[1, 3, 5, 7, 9],要查找大于等于6的第一个数字,那么调用函数binary_search(arr, 6)后会返回2,即数字5的下标。
相关问题
本关任务:采用二分查找算法实现查找有序数组里大于等于 x 的第一个数字。用c语言
以下是用C语言实现查找有序数组里大于等于x的第一个数字的二分查找算法:
```c
#include <stdio.h>
int binarySearch(int arr[], int n, int x) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] >= x) {
if (mid == 0 || arr[mid - 1] < x) {
return mid;
} else {
right = mid - 1;
}
} else {
left = mid + 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 6;
int index = binarySearch(arr, n, x);
if (index == -1) {
printf("数组中没有大于等于%d的数字", x);
} else {
printf("第一个大于等于%d的数字的下标为%d", x, index);
}
return 0;
}
```
本关任务:采用二分查找算法实现查找有序数组里大于等于 K 的第一个数字。
二分查找是一种在有序数组中查找特定元素的高效算法。基本思想是将待查找区间分成两半,比较中间元素与待查找值的大小,以此决定是继续在左侧区间还是右侧区间进行查找。对于本关任务,即查找大于等于K的第一个数字,我们可以在传统的二分查找基础上稍作修改。
具体步骤如下:
1. 初始化两个指针,left指向数组的第一个元素,right指向数组的最后一个元素。
2. 进行循环,直到left大于right,循环结束。
3. 在循环中,计算中间位置mid = (left + right) / 2。
4. 如果中间元素大于等于K,那么记录下这个位置,并将left移动到mid+1的位置,以便查找更小的可能值。
5. 如果中间元素小于K,那么将right移动到mid-1的位置,以便在更大的范围内查找。
6. 在循环结束后,left指向的就是大于等于K的第一个数字的位置。
代码实现(假设数组是升序排列的):
```java
public int findFirstEqualOrGreater(int[] nums, int K) {
int left = 0, right = nums.length - 1, result = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] >= K) {
result = mid; // 记录位置,并继续向左查找可能的更小值
right = mid - 1;
} else {
left = mid + 1; // 向右查找更大的值
}
}
return result; // 返回结果,可能为-1,表示没有大于等于K的数
}
```
阅读全文