给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
生活随笔
收集整理的這篇文章主要介紹了
给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 問題描述
????????///?在給定的數組查找是否存在和為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。給出一個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;
?}??
?? ? ??
轉載于:https://www.cnblogs.com/xuqiang/archive/2011/03/13/1982951.html
總結
以上是生活随笔為你收集整理的给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Open 5分钟:恺英收集闵懿
- 下一篇: NHibernate 对分组聚合支持的不