JAVA解决两数之和 II 输入有序数组问题

JAVA解决两数之和 II 输入有序数组问题

01 题目

给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target

函数应该以长度为 2 的整数数组的形式返回这两个数的下标值*。*numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length

假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。

示例 1:

输入:numbers = [1,2,4,6,10], target = 8
输出:[1,3]
解释:2 与 6 之和等于目标数 8 。因此 index1 = 1, index2 = 3 。

示例 2:

输入:numbers = [2,3,4], target = 6
输出:[0,2]

示例 3:

输入:numbers = [-1,0], target = -1
输出:[0,1]

提示:

  • 2 <= numbers.length <= 3 * 104
  • -1000 <= numbers[i] <= 1000
  • numbers非递减顺序 排列
  • -1000 <= target <= 1000
  • 仅存在一个有效答案

02 知识点

  • 二分查找
  • 双指针

03 我的题解

public class erfen03 {
public static void main(String[] args) {
	//测试数据
	int[] nums= {1,2,4,6,10};
	twoSum(nums,8);
	for (int i = 0; i < 2; i++) {
		System.out.println(nums[i]);
		
	}
	
}
 public static  int[] twoSum(int[] numbers, int target) {
 //		 返回数组
		 	int[] nums=new int[2];
//		 	循环的范围是整个数组的最左边到最右边
		 	int left=0;
		 	int right=numbers.length-1;
//		 	当循环范围的最右边小于最左边时,停止循环
		 	while (left<=right) {
//		 		当左右指针所代表的数之和符合条件时,退出循环,比目标值小则移动最左边,比目标值大则移动最右边
				if (numbers[left]+numbers[right]==target) {
					System.out.println(left+" "+right);
					nums[0]=left;
					nums[1]=right;
					break;
				}else if (numbers[left]+numbers[right]<target) {
					left++;
				}else {
					right--;
				}
			}
		 	return nums;
	    }
}

你可能感兴趣的:(蓝桥杯,java,算法,数据结构)