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

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 ;

 }  

       


转载于:https://www.cnblogs.com/xuqiang/archive/2011/03/13/1982951.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值