Java代码给定一个n个元素的升序数组A和目标值B,在A中找到目标数的数组下标
时间: 2023-05-21 15:05:01 浏览: 187
可以使用二分查找算法来解决这个问题,具体实现如下:
public static int binarySearch(int[] A, int B) {
int left = 0, right = A.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (A[mid] < B) {
left = mid + 1;
} else if (A[mid] > B) {
right = mid - 1;
} else {
return mid;
}
}
return -1;
}
调用该函数可以找到目标数的数组下标,如果返回值为-1表示目标数在数组中不存在。
相关问题
给定一个数组和目标值,找到两数之和为目标值的输入下标。python
在Python中,要找到数组(列表)中两个数之和等于给定目标值的下标,可以使用哈希表来优化搜索过程,这种方法的时间复杂度是O(n),其中n是数组的长度。具体步骤如下:
1. 创建一个空的哈希表(通常使用字典来实现)。
2. 遍历数组中的每个元素,对于每个元素:
- 计算当前元素与目标值的差值。
- 检查这个差值是否已经存在于哈希表中。
- 如果差值存在,说明已经找到了一对符合条件的下标,返回这对下标。
- 如果差值不存在,将当前元素的值及其对应的下标存入哈希表。
3. 如果遍历结束都没有找到符合条件的下标,说明没有解。
下面是一个使用这种方法的Python代码示例:
```python
def two_sum(nums, target):
hash_table = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hash_table:
return [hash_table[complement], i]
hash_table[num] = i
return []
# 示例使用
nums = [2, 7, 11, 15]
target = 9
result = two_sum(nums, target)
print(result) # 输出应该是 [0, 1],因为 nums[0] + nums[1] = 2 + 7 = 9
```
给定一个排序数组和一个目标值 在数组中找到目标值 并返回其索引
可以使用二分查找算法在排序数组中查找目标值。具体步骤如下:
1. 定义左右指针,左指针初始值为 0,右指针初始值为数组长度减一。
2. 当左指针小于等于右指针时,执行以下步骤:
1. 计算中间位置 mid,mid = (left + right) / 2。
2. 如果中间位置的值等于目标值,返回 mid。
3. 如果中间位置的值大于目标值,将右指针移动到 mid-1 的位置。
4. 如果中间位置的值小于目标值,将左指针移动到 mid+1 的位置。
3. 如果没有找到目标值,返回 -1。
具体实现如下:
```python
def binary_search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid - 1
else:
left = mid + 1
return -1
```
这个算法的时间复杂度是 O(logN),其中 N 是数组的长度。
阅读全文