Nowcoder java-和为S的两个数字
Nowcoder java-和为S的两个数字
(题目来自牛客网)

思路
若b>a,且存在, a + b = s; (a - m ) + (b + m) = s
则:(a - m )(b + m)=ab - (b-a)m - m*m < ab;说明外层的乘积更小;
也就是说依然是左右夹逼法!!!只需要2个指针
1.left开头,right指向结尾
2.如果和小于sum,说明太小了,left右移寻找更大的数
3.如果和大于sum,说明太大了,right左移寻找更小的数
4.和相等,把left和right的数返回
代码
import java.util.ArrayList;
public class FindNumbersWithSum {public static ArrayList<Integer> findNumbersWithSum(int[] array, int sum) {if (array.length <= 1) {return null;}ArrayList<Integer> list = new ArrayList<>();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) {left++;} else {right--;}}return list;}public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5, 6, 7, 8};int sum = 7;System.out.println(findNumbersWithSum(array, sum));}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
