牛客网刷题之和为S的两个数字

来源:互联网 发布:用友软件操作流程 编辑:程序博客网 时间:2024/05/29 08:02

题目描述:

这里写图片描述

解题思路:

  既然是排序的,当然优先考虑二分法,分别用两个指针分别指向左边第一个位置和右边第一个位置,左右逼近,当左边的位置大于等于右边的位置即可。题目要求是先输出乘积小的,由于我们每次先得到的都是一个小点的数和一个大点的数,故而和相等的情况下,乘积必定是最小的。

题解:

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

ac结果:

这里写图片描述

0 0
原创粉丝点击