Skip to content

Latest commit

 

History

History
57 lines (45 loc) · 1.09 KB

41-1-升序数组中满足指定和且乘积最小的元素.md

File metadata and controls

57 lines (45 loc) · 1.09 KB

题目描述

在升序数组中寻找满足指定sum的两个元素,如果有多对满足,返回乘积最小的那对;

  • 实现方法

和相同的两个元素,差越大的乘积越小;左右指针分别移动;

package DayCode;

import java.util.ArrayList;

/**
 * @author Ethan
 * @desc 在指定的升序数组中寻找满足sum的两个数字,如果有多对,返回其中乘积最小的 
 */
public class C41_1FindNumbersWithSum {

	/**
	 * @author Ethan
	 * @desc 前后指针,间隔越远乘积越小 
	 */
	public ArrayList<Integer> findNumbers(int[] nums,int sum){
		
		ArrayList<Integer> al = new ArrayList<>();
		
		//1-异常参数检测
		if(nums == null || nums.length == 0){
			return al;
		}
		
		//2-初始化 left: right: curSum:
		int left = 0;
		int right = nums.length - 1;
		int curSum = 0;
		
		//3-左右指针移动
		while(left < right){
			curSum = nums[left] + nums[right];
			if(curSum == sum){
				al.add(nums[left]);
				al.add(nums[right]);
				return al;
			}else{
				if(curSum > sum){
					right--;
				}else{
					left++;
				}
			}
		}
		return al;
	}
}