基于visual Studio2013解决面试题之0303数组求和




题目



解决代码及点评

/*
	输入一个已经按升序排序过的数组和一个数字,
	在数组中查找两个数,使得它们的和正好是输入的那个数字。
	要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
*/

#include <iostream>
using namespace std;

// 查找函数,pnArr是有序数组
// nLen是数组长度
// nSum是期望的和
// a,b是查找结果下标,如果返回true,那么a,b有效
// 如果返回false说明没有办法求和,a,b无效
bool Find(int *pnArr, int nLen, int nSum, int &a, int &b)
{
    int i = 0;
    int j = nLen - 1;
	// 从两边逼近,i从数组小的一边,j从数组大的一边,逼近期望和
    while (i < j)
    {
        if (pnArr[i] + pnArr[j] > nSum)  // 如果和太大,则减小j,让下次和变小
        {
            j--;
        }
        else if (pnArr[i] + pnArr[j] < nSum) // 如果和太小,则增加i,让下次和变大
        {
            i++;
        }
        else   // 如果和正好等于期望和,那么说明已经找到了
        {
            a = i;
            b = j;
            return true;
        }
    }

    return false;
}

// 测试主函数
int main()
{
    int nArr[] = {1,3,5,7,9,12,32,45,56,78,90};
    int nLen = sizeof(nArr) / sizeof(int);
    int i, j;
    int nSum;
    cout<<"请输入一个数字:";
    cin>>nSum;
    if (Find(nArr, nLen, nSum, i, j))
    {
        cout<<nArr[i]<<" + "<<nArr[j]<<" = "<<nSum<<endl;
    }
    else
    {
        cout<<"没有两数之和为"<<nSum<<endl;
    }
    system("pause");
    return 0;
}



代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值