输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
import java.util.ArrayList;
/**
* 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
*
* @author pomay
*
*/
public class Solution_FindNumsWithSum
{
public static ArrayList<Integer> FindNumbersWithSum(int[] array, int sum)
{
ArrayList<Integer> lists = new ArrayList<Integer>();
for (int start = 0, end = array.length - 1; start < end;)
{
if (array[start] + array[end] == sum)
{
lists.add(array[start]);
lists.add(array[end]);
break;
} else if (array[start] + array[end] > sum)
end--;
else
start++;
}
return lists;
}
public static void main(String[] args)
{
int[] array =
{ 1, 2, 4, 7, 11, 15 };
int sum = 15;
ArrayList<Integer> lists = FindNumbersWithSum(array, sum);
for (int i = 0; i < lists.size(); i++)
System.out.print(lists.get(i) + " ");
}
}
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
import java.util.ArrayList;
/**
* 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,
* 他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。
* 现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
*
* @author pomay
*
*/
public class Solution_FindContinuousSequence
{
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum)
{
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if (sum < 3)
return list;
int small = 1;
int big = 2;
int end = (sum + 1) / 2;
int temp = small + big;
while (small < end)
{
if (temp == sum)
ContinuousAequence(list, small, big);
while (temp > sum && small < end)
{
temp -= small;
small++;
if (temp == sum)
ContinuousAequence(list, small, big);
}
big++;
temp += big;
}
return list;
}
private void ContinuousAequence(ArrayList<ArrayList<Integer>> list, int small, int big)
{
ArrayList<Integer> lists = new ArrayList<Integer>();
for (int i = small; i <= big; i++)
lists.add(i);
list.add(lists);
}
public static void main(String[] args)
{
int sum = 15;
Solution_FindContinuousSequence s = new Solution_FindContinuousSequence();
ArrayList<ArrayList<Integer>> list = s.FindContinuousSequence(sum);
for (ArrayList<Integer> arrayList : list)
{
for (int i = 0; i < arrayList.size(); i++)
System.out.print(arrayList.get(i) + " ");
System.out.println();
}
}
}