给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
2011-03-13 20:46
639 查看
1. 问题描述给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X。给出一个O(nlg(n))的算法。
2. 解决思路
首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nlg(n)级别,然后通过从中间相两边查找即可。
3. 实现代码
/// <summary>
/// 在给定的数组查找是否存在和为sum的两个元素,如果存在
/// 函数返回true,否则false
/// </summary>
/// <param name="arr"></param>
/// <param name="sum"></param>
static bool Find(int[] arr, int sum)
{
// 对数组排序
MergeSort(ref arr, 0, arr.Length - 1);
int i = ( arr.Length - 1 ) / 2;
int j = i + 1;
while ( ( i >= 0 ) &&
(j < arr.Length))
{
// 找到
if(arr[i] + arr[j] == sum)
{
Console.WriteLine(String.Format("{0} + {1} = {2}", arr[i], arr[j], sum));
return true;
}
else if(arr[i] + arr[j] > sum)
{
--i;
}
else // (arr[i] + arr[j] < sum)
{
++j;
}
}
// goes here
Console.WriteLine("未能找到!");
return false;
}
2. 解决思路
首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nlg(n)级别,然后通过从中间相两边查找即可。
3. 实现代码
/// <summary>
/// 在给定的数组查找是否存在和为sum的两个元素,如果存在
/// 函数返回true,否则false
/// </summary>
/// <param name="arr"></param>
/// <param name="sum"></param>
static bool Find(int[] arr, int sum)
{
// 对数组排序
MergeSort(ref arr, 0, arr.Length - 1);
int i = ( arr.Length - 1 ) / 2;
int j = i + 1;
while ( ( i >= 0 ) &&
(j < arr.Length))
{
// 找到
if(arr[i] + arr[j] == sum)
{
Console.WriteLine(String.Format("{0} + {1} = {2}", arr[i], arr[j], sum));
return true;
}
else if(arr[i] + arr[j] > sum)
{
--i;
}
else // (arr[i] + arr[j] < sum)
{
++j;
}
}
// goes here
Console.WriteLine("未能找到!");
return false;
}
相关文章推荐
- 给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
- 给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
- 判断有序整型数组中是否存在两数,相加之和等于给定的任意整数
- 判断数组中是否存在两数之和等于X
- 【41】递增数组判断是否存在两个树等于给定值
- 【41】递增数组判断是否存在两个树等于给定值
- 【41】递增数组判断是否存在两个树等于给定值
- 【41】递增数组判断是否存在两个树等于给定值
- 判断数组中是否存在两数之和为给定值
- 判断数组中是否存在和等于给定值的两个数
- 《算法导论》学习笔记02— —判断集合是否存在两数之和为给定的数
- 2.创建一个20个大小的随机数组,然后输入一个数,判断是否存在这个数
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 给定一个数组和一个数字,给定的数组里是否存在两个数字之和等于给定的数字
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 有序整型数组A,判断A中是否存在两个数之和等于X,时间O(n)
- <再来一题>数组中是否存在两数之和等于target
- 判断一个有序数组中是否有两个数的和等于给定的数
- 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。