FindSum

/*----------------------------------------------
    find  ,if  any,two  element   in    sorted  A,
 whose  sum  is  x   in   O(n)
 ---------------------------------------------*/
bool   FindSum(int A[],int n,int x,int &i,int &j)
{
 i=0,j=1;                                 //initialize   left   and    right    pointer

 //find   first  i   and    j  where  A[i]+A[j]>x
 while((A[i]+A[j])<x&&j<n)
 {
  i++;
  j++;
 }

 if(j>=n)                                                              //index   out  of  bound
  return false; 
 else
  if((A[i]+A[j])==x)                                          //solution  found
   return  true;

      
    //A[i]+A[j]>x
  i--;                                                              //left  pointer  backtrack
  while(i>=0&&j<n)
{
  if((A[i]+A[j])==x)
   return  true;                                               //solution  found
  else
   if((A[i]+A[j])>x)
          i--;                                                     //left  pointer  backtrack
   else
    j++;                                                      //right  pointer  advance
}

      return  false;

 

 

改进:若不是有序,则先对其排序O(nlogn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值