// 面试题57(一):和为s的两个数字
// 题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们
// 的和正好是s。如果有多对数字的和等于s,输出任意一对即可。 #include <iostream> bool FindNumbersWithSum(int data[], int length, int sum,
int* num1, int* num2)
{
bool found = false;
if (length < || num1 == nullptr || num2 == nullptr)//边界判断
return found; int ahead = length - ;//设置两个指针指向头和尾
int behind = ; while (ahead > behind)
{
long long curSum = data[ahead] + data[behind];//注意long long if (curSum == sum)//如果刚好等于
{
*num1 = data[behind];
*num2 = data[ahead];
found = true;
break;
}
else if (curSum > sum)//如果大于要求的数值,令尾指针向前动一个
ahead--;
else//如果小于要求的数值,令头指针向前动一个
behind++;
} return found;
} // ====================测试代码====================
void Test(const char* testName, int data[], int length, int sum, bool expectedReturn)
{
if (testName != nullptr)
printf("%s begins: ", testName); int num1, num2;
int result = FindNumbersWithSum(data, length, sum, &num1, &num2);
if (result == expectedReturn)
{
if (result)
{
if (num1 + num2 == sum)
printf("Passed. \n");
else
printf("FAILED. \n");
}
else
printf("Passed. \n");
}
else
printf("FAILED. \n");
} // 存在和为s的两个数字,这两个数字位于数组的中间
void Test1()
{
int data[] = { , , , , , };
Test("Test1", data, sizeof(data) / sizeof(int), , true);
} // 存在和为s的两个数字,这两个数字位于数组的两段
void Test2()
{
int data[] = { , , , , , };
Test("Test2", data, sizeof(data) / sizeof(int), , true);
} // 不存在和为s的两个数字
void Test3()
{
int data[] = { , , , , , };
Test("Test3", data, sizeof(data) / sizeof(int), , false);
} // 鲁棒性测试
void Test4()
{
Test("Test4", nullptr, , , false);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
system("pause");
return ;
}

《剑指offer》第五十七题(和为s的两个数字)的更多相关文章

  1. 【Java】 剑指offer(56-1) 数组中只出现一次的两个数字

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程 ...

  2. 《剑指offer》第二十七题(二叉树的镜像)

    // 面试题27:二叉树的镜像 // 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. #include <iostream> #include "BinaryTree ...

  3. 《剑指offer》第十七题(打印1到最大的n位数)

    // 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <ios ...

  4. 《剑指offer》面试题57. 和为s的两个数字

    问题描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:nums = [2,7,11,15], tar ...

  5. 剑指Offer(三十七):数字在排序数组中出现的次数

    剑指Offer(三十七):数字在排序数组中出现的次数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...

  6. 剑指Offer(二十七):字符串的排列

    剑指Offer(二十七):字符串的排列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...

  7. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

  8. 剑指offer第五章

    剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...

  9. 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74612786冷血之心的博客) 剑指Offer(第二版)面试案例:树 ...

  10. 剑指Offer - 九度1351 - 数组中只出现一次的数字

    剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...

随机推荐

  1. Pytorch的torch.cat实例

    import torch 通过 help((torch.cat)) 可以查看 cat 的用法 cat(seq,dim,out=None) 其中 seq表示要连接的两个序列,以元组的形式给出,例如:se ...

  2. 源码部署pxc集群

    想了想还是研究一下怎么源码安装pxc吧,毕竟很多组件都是源码安装的. 环境: yum install -y boost-devel libodb-boost-devel check-devel ope ...

  3. v-model指令实现简单的问卷表格

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  4. 数据结构(C语言)—排序

    数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...

  5. linux下安装tomcat和jdk

    1.现在的linux服务器一般自带jdk,先查询是否已经安装jdk rpm -qa | grep java rpm -qa | grep jdk 如上则是没有安装,可以直接跳到步骤X,安装jdk.否则 ...

  6. scrapy - Request 中的回调函数不执行

    在 scrapy 中, scrapy.Request(url, headers=self.header, callback=self.parse) 调试的时候,发现回调函数 parse_detail  ...

  7. JXOI2018守卫 区间DP

    链接 https://loj.ac/problem/2545 思路 f[i][j]表示i到j区间的最小监视人数 可以预处理出来g[i][j],表示i能否监视到j (其实预处理的关系不大,完全可以直接判 ...

  8. HDU 3506 Monkey Party(区间DP)题解

    题意:有n个石堆排成环,每次能合并相邻的两堆石头变成新石堆,代价为新石堆石子数,问最少的总代价是多少 思路:先看没排成环之前怎么做:用dp[i][j]表示合并i到j所需的最小代价,那么dp[i][j] ...

  9. HDU 4825 Xor Sum(01字典树)题解

    思路:先把所有数字存进字典树,然后从最高位贪心. 代码: #include<set> #include<map> #include<stack> #include& ...

  10. ActiveMQ安装使用

    入门: https://www.cnblogs.com/cyfonly/p/6380860.html http://www.uml.org.cn/zjjs/201802111.asp https:// ...