您的位置:首页 > 其它

给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X

2016-04-25 17:16 302 查看
原文链接

题目:

给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X,请用C、C++或Java语言实现这一算法,要求速度越快越好。

解:

static Boolean Find(int[] arr, int sum)
{
// 对数组排序
Arrays.sort(arr, 0, arr.length);

int i = ( arr.length - 1 ) / 2;
int j = i + 1;

while ( ( i >= 0 ) && (j < arr.length))
{
// 找到
if(arr[i] + arr[j]  == sum)
{
System.out.println(arr[i]+"+"+arr[j]+"="+sum);
return true;
}
else if(arr[i] + arr[j] > sum)
{
--i;
}
else // (arr[i] + arr[j]  < sum)
{
++j;
}
}

// goes here
System.out.println("未找到! ");
return false;
}


小结:

1,时间复杂度为O(n);

2,采用先排序,从中间往两边找的顺序,如果和大了,则左边的数往左移;如果和小了,则右边的数往右移。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: