给出一个对撞指针的java代码示例
时间: 2023-11-23 20:42:37 浏览: 35
下面是一个对撞指针的 Java 代码示例,用于在有序数组中查找两个数的和等于目标值的组合:
```java
public int[] twoSum(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == target) {
return new int[]{left, right}; // 返回两个数的下标
} else if (sum < target) {
left++; // 和小于目标值,左指针右移
} else {
right--; // 和大于目标值,右指针左移
}
}
return new int[]{-1, -1}; // 没有找到符合条件的组合
}
```
在该代码中,我们使用了两个指针 `left` 和 `right` 分别指向数组的最左和最右元素。然后在一个循环中,我们计算 `nums[left]` 和 `nums[right]` 的和 `sum`。如果 `sum` 等于目标值 `target`,则返回两个数的下标。如果 `sum` 小于 `target`,则说明和太小了,我们将左指针 `left` 右移一位。如果 `sum` 大于 `target`,则说明和太大了,我们将右指针 `right` 左移一位。通过不断调整指针的位置,直到找到符合条件的组合或者指针相遇,循环结束。
这样的对撞指针算法可以在有序数组中以线性时间复杂度找到两个数的和等于目标值的组合。如果找不到符合条件的组合,我们可以返回一个特定的值,例如在上述代码中返回 `{-1, -1}`。