【剑指 Offer打卡】 双指针 和为S的两个数字

115 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

点击 这里 可以查看更多算法面试相关内容~

一、题目描述:

输入一个递增排序的数组array和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。

二、思路分析:

有序数组 前后两个指针指向头元素和尾元素,判断

三、AC 代码:

package cn.com.codingce.双指针.和为S的两个数字;

import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) {
        System.out.println(new Solution().FindNumbersWithSum(new int[]{1, 2, 4, 3, 9}, 3));
    }

    public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {
        ArrayList<Integer> ret = new ArrayList<>();
        int left = 0, right = array.length - 1;
        while (left < right) {
            if (sum == array[left] + array[right]) {
                ret.add(array[left]);
                ret.add(array[right]);
                return ret;
            } else if (sum > array[left] + array[right]) {
                left++;
            } else {
                right--;
            }
        }
        return ret;
    }
}

总结

一点一滴