本文共 1080 字,大约阅读时间需要 3 分钟。
双指针
输入一个递增排序的数组和一个数字 S,在数组中查找两个数,使得他们的和正好是 S,如果有多对数字的和等于 S,输出两个数的乘积最小的。
使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。
如果两个指针指向元素的和 sum < S,移动较小的元素指针,使 sum 变大一些。
如果两个指针指向元素的和 sum > S,移动较大的元素指针,使 sum 变小一些。
如果两个指针指向元素的和 sum == S,那么返回这两个元素。
import java.util.ArrayList;import java.util.Arrays;public class Solution { public ArrayListFindNumbersWithSum(int[] array, int sum) { // 一个指针指向元素较小的值 int low = 0; // 一个指针指向元素较大的值 int high = array.length - 1; while (low < high) { // 两个指针指向元素的和 s int s = array[low] + array[high]; // 如果 s == sum,那么返回这两个元素。 if (s == sum) { return new ArrayList<>(Arrays.asList(array[low], array[high])); } // 如果 s < sum,移动较小的元素指针,使 s 变大一些。 else if (s < sum) { low++; } // 如果 s > sum,移动较大的元素指针,使 s 变小一些。 else { high--; } } return new ArrayList<>(); }}
转载地址:http://lyjvb.baihongyu.com/