算法刷题(19)_和为S的两个数字学习记录

算法刷题(19)_和为S的两个数字学习记录

【说明】

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 

输出描述:

对应每个测试案例,输出两个数,小的先输出。

【算法实现】

package p14;

import java.util.ArrayList;
import java.util.List;

/**
 * 和为S的两个数
 * @author Guozhu zhu
 * @date 2018/8/1
 * @version 1.0
 *
 */
public class Test01 {
	
	public static void main(String[] args) {
		int[] arr = {1, 3, 4, 5, 6, 7};
		List<Integer> list = Solution(arr, 8);
		for (int i : list) {
			System.out.println(i);
		}
	}
	
	//从两头夹逼,找到第一组满足条件的即可。
	//由于数组是递增序列,那么先找到的那组就是积最小。
	public static ArrayList<Integer> Solution(int[] arr, int sum) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		if (arr == null || arr.length < 2) {
			return list;
		}
		int i = 0;
		int j = arr.length-1;
		while (i < j) {
			if (arr[i] + arr[j] == sum) {
				list.add(arr[i]);
				list.add(arr[j]);
				return list;
			} else if (arr[i] + arr[j] > sum) {
				j--;
			} else {
				i++;
			}
		}
		return list;
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_37770023/article/details/81323383