您的位置:首页 > 其它

在给定数组中查找两个数的和为给定值sum

2010-08-12 11:04 197 查看
/**
* 传入一个数组和一个sum值,查找在该数组中是否存在两个数的和为sum
*
* @author huoqi
* @date 2010-08-12
*/
public class FindSum
{
public static void main(String[] args)
{
int[] arr =
{ 52, 59, 69, 41, 2, 3740286, 38, 74, 21, 88, 23, 44, 434, 525, 66,
75463, 454354, 43243, 54534, 32446, 765765, 756756, 56345,
65465, 345435, 34, 567, 6, 75, 773, 3740 };

// 先对数组进行排序
arr = quickSort(arr, 0, arr.length - 1);
// 然后两边夹逼,进行查找
String findRet = find(arr, 82);
if (findRet == null)
{
System.out.println("not found");
}
else
{
System.out.println(findRet);
}
}

/**
* 传入一个数组和一个sum值,查找在该数组中是否存在两个数的和为sum
*
* @param arr 待查找数组
* @param sum 待查找的和
* @return 返回字符串形式,为相加的两个数,如果没有找到,返回null
*/
public static String find(int[] arr, long sum)
{
int start = 0;
int end = arr.length - 1;
int tempSum = 0;
while (true)
{
tempSum = arr[start] + arr[end];

if (arr[start] + arr[end] == sum)
{
return String.valueOf(arr[start] + " + " + arr[end]);
}
else
{
if (end - start == 1)
{
return null;
}
else
{
if (tempSum > sum)
{
end--;
}
else if (tempSum < sum)
{
start++;
}
}
}
}
}

/**
* 快速排序算法
*
* @param arr 待排序数组
* @param startIndex 起始下标
* @param endIndex 结束下标
* @return 排序好的数组
*/
public static int[] quickSort(int[] arr, int start, int end)
{
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐