《剑指offer》第五十七题(和为s的两个数字)
- // 面试题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的两个数字)的更多相关文章
- 【Java】 剑指offer(56-1) 数组中只出现一次的两个数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程 ...
- 《剑指offer》第二十七题(二叉树的镜像)
// 面试题27:二叉树的镜像 // 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. #include <iostream> #include "BinaryTree ...
- 《剑指offer》第十七题(打印1到最大的n位数)
// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <ios ...
- 《剑指offer》面试题57. 和为s的两个数字
问题描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:nums = [2,7,11,15], tar ...
- 剑指Offer(三十七):数字在排序数组中出现的次数
剑指Offer(三十七):数字在排序数组中出现的次数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...
- 剑指Offer(二十七):字符串的排列
剑指Offer(二十七):字符串的排列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 剑指offer第五章
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
- 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74612786冷血之心的博客) 剑指Offer(第二版)面试案例:树 ...
- 剑指Offer - 九度1351 - 数组中只出现一次的数字
剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...
随机推荐
- Docker学习笔记之运行和管理容器
0x00 概述 容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”.在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Doc ...
- Golang面向对象_继承
package main import "fmt" type Person struct { name string //名字 sex byte //性别 age int //年龄 ...
- P1383 高级打字机
P1383 高级打字机 主席树 一发主席树解决. 插入操作十分显然. 撤销操作复制前面的版本就行. 询问操作十分显然. #include<iostream> #include<cst ...
- mysql/mariadb应该使用utf8mb4而不是utf8
详情参考https://mp.weixin.qq.com/s?__biz=MzIwMzg1ODcwMw==&mid=2247487968&idx=1&sn=2ff7b511f6 ...
- 20145326蔡馨熤《网络对抗》——MSF基础应用
20145326蔡馨熤<网络对抗>——MSF基础应用 实验后回答问题 用自己的话解释什么是exploit,payload,encode. exploit:起运输的作用,将数据传输到对方主机 ...
- ListView与ArrayAdapter(二)
ArrayAdapter: 数组适配器,用于简单的文字列表 activity_main.xml <RelativeLayout xmlns:android="http://schema ...
- Overture 5入门之如何设置延音线
延音线作为五线谱标记符合之一,是大家使用Overture时需要常用的一个基本标记符号.延音线是一条向上或向下弯曲的弧线,它的作用是将两个或两个以上的具有相同高音的音符来进行相连. 延音线作为再编曲演唱 ...
- AppStore 添加回复
itunes connect 评论位置 1, 2, 添加用户权限:除了管理和客户支持可以回复.开发人员等只有只读权限
- Android编译系统中的Android.bp【转】
本文转载自: 转自:http://note.qidong.name/2017/08/android-blueprint/ Android编译系统中的Android.bp.Blueprint与Soong ...
- CentOS 安装 Redis 笔记
Redis 安装 yum install redis -y 在启动 redis-server 之前,你需要修改配置文件/etc/redis.conf: 找到 bind 127.0.0.1,将其注释,这 ...