【剑指offer】和为S的两个数字

和为S的两个数字

http://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b

方法1: 二分 复杂度O(n)

import java.util.ArrayList;
import java.util.Arrays;

public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < array.length; i++) {
            if (array[i] > sum) {
                break;
            }
            // Arrays.binarySearch返回值:
            // 若找到元素,则返回该元素下标;否则返回-(插入点)-1
            int ans = Arrays.binarySearch(array, i + 1, array.length, sum - array[i]);
            if (ans >= 0) {
                list.add(array[i]);
                list.add(array[ans]);
                break;
            }
        }
        return list;
    }
}

方法2: 首尾指针 复杂度O(n)

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {

        ArrayList<Integer> list = new ArrayList<Integer>();
        int l = 0, r = array.length - 1;
        while (l < r) {
            if (array[l] + array[r] == sum) {
                list.add(array[l]);
                list.add(array[r]);
                break;
            } else if (array[l] + array[r] > sum) {
                r--;
            } else {
                l++;
            }
        }
        return list;
    }

}
全部评论
low为什么要 i+1,不是从数组的一个元素开始吗?
点赞 回复
分享
发布于 2019-12-24 09:56

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务