JZ-C-41

剑指offer第四十一题:和为s的两个数字:输入一个递增排序的数组和一个数字,在数组中查找两个数,使得它们的和正好等于s。若有多对,输出任意一对即可

 1 //============================================================================
 2 // Name        : JZ-C-41.cpp
 3 // Author      : Laughing_Lz
 4 // Version     :
 5 // Copyright   : All Right Reserved
 6 // Description :和为s的两个数字:输入一个递增排序的数组和一个数字,在数组中查找两个数,使得它们的和正好等于s。若有多对,输出任意一对即可
 7 //============================================================================
 8
 9 #include <iostream>
10 #include <stdio.h>
11 using namespace std;
12
13 bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2) {
14     bool found = false;
15     if (length < 1 || num1 == NULL || num2 == NULL)
16         return found;
17
18     int ahead = length - 1;
19     int behind = 0;
20
21     while (ahead > behind) {
22         long long curSum = data[ahead] + data[behind];
23
24         if (curSum == sum) {
25             *num1 = data[behind];
26             *num2 = data[ahead];
27             found = true;
28             break;
29         } else if (curSum > sum)
30             ahead--;
31         else
32             behind++;
33     }
34
35     return found;
36 }
37
38 // ====================测试代码====================
39 void Test(char* testName, int data[], int length, int sum,
40         bool expectedReturn) {
41     if (testName != NULL)
42         printf("%s begins: ", testName);
43
44     int num1, num2;
45     int result = FindNumbersWithSum(data, length, sum, &num1, &num2);
46     if (result == expectedReturn) {
47         if (result) {
48             if (num1 + num2 == sum)
49                 printf("Passed. \n");
50             else
51                 printf("Failed. \n");
52         } else
53             printf("Passed. \n");
54     } else
55         printf("Failed. \n");
56 }
57
58 // 存在和为s的两个数字,这两个数字位于数组的中间
59 void Test1() {
60     int data[] = { 1, 2, 4, 7, 11, 15 };
61     Test("Test1", data, sizeof(data) / sizeof(int), 15, true);
62 }
63
64 // 存在和为s的两个数字,这两个数字位于数组的两段
65 void Test2() {
66     int data[] = { 1, 2, 4, 7, 11, 16 };
67     Test("Test2", data, sizeof(data) / sizeof(int), 17, true);
68 }
69
70 // 不存在和为s的两个数字
71 void Test3() {
72     int data[] = { 1, 2, 4, 7, 11, 16 };
73     Test("Test3", data, sizeof(data) / sizeof(int), 10, false);
74 }
75
76 // 鲁棒性测试
77 void Test4() {
78     Test("Test4", NULL, 0, 0, false);
79 }
80
81 int main(int argc, char** argv) {
82     Test1();
83     Test2();
84     Test3();
85     Test4();
86
87     return 0;
88 }
时间: 2024-11-14 19:29:31

JZ-C-41的相关文章

解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例

在mysql主从同步时经常会用到Xtra, XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说优势较大好处多,在RHEL6中安装XtraBackup时会发生缺少依赖包的现象 本案例针对Xtra缺少依赖包的情况进行安装分析解决 1.本实验环境 [root@master ~]# uname  -r 2.6.32-573.el6.x86_64 [root@master ~]# cat /etc/redhat-

django之创建第4-1个项目-访问dict数据

1.修改index.html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>django之创建第四个项目</title> </head> <body> <h1>hello,{{test.name}}</h1> <!--模板 变量用变量定义--&g

41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法

41. First Missing Positive Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 题目:寻找第一个丢失的整数意思为[1,2,4,5,

Win32 汇编 - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;无符号大于则跳转 JNA

Professional C# 6 and .NET Core 1.0 - Chapter 41 ASP.NET MVC

What's In This Chapter? Features of ASP.NET MVC 6 Routing Creating Controllers Creating Views Validating User Inputs Using Filters Working with HTML and Tag Helpers Creating Data-Driven Web Applications Implementing Authentication and Authorization W

Maven 的41种骨架功能介绍(转)

Maven 的41种骨架: ...>mvn archetype:generate 1: internal -> appfuse-basic-jsf (创建一个基于Hibernate,Spring和JSF的Web应用程序的原型)  2: internal -> appfuse-basic-spring (创建一个基于Hibernate,Spring和Spring MVC的Web应用程序的原型)  3: internal -> appfuse-basic-struts (创建一个基于H

TWinControl的消息覆盖函数大全(41个WM_函数和31个CM_函数,它的WndProc就处理鼠标(转发)、键盘(取消拖动)、焦点、和WM_NCHITTEST一共4类消息)

注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中): TWinControl = class(TControl) private // 41个windows消息,几乎全部消息都是私有函数(因为不需要别人来调用).很多都是覆盖消息,也有少部分是首次出现. // 总结规律:直接接受消息的函数都起一个中转站的作用,其函数内容都十分简单. // WM_PAINT第一次出现,由某些直接继承Win控件的类使用.而图形控件和自绘控件会自己响应这个消息. // TControl 类控

LeetCode - 41. First Missing Positive

41. First Missing Positive Problem's Link ---------------------------------------------------------------------------- Mean: 给你一组整数,找出第一个空缺的正整数. 要求:时间O(n),空间O(n). analyse: 这题时间O(n)想了半天没想到,用O(n*logn)过的. 然后看了discuss,想法非常巧妙,自愧不如. Time complexity: O(N) v

C# 开发者审查代码的41条建议--转

转自:连接http://www.cnblogs.com/smiler/p/3274512.html 1. 确保没有任何警告(warnings). 2.如果先执行Code Analysis(启用所有Microsoft Rules)再消除所有警告就更好了. 3. 去掉所有没有用到的usings.编码过程中去掉多余代码是个好习惯.(参考:msdn) 4. 在合理的地方检查对象是否为’null’,避免运行的时候出现Null Reference Exception. 5. 始终遵循命名规范.一般而言变量参

codecombat之边远地区的森林23-30关及地牢40\41关代码分享

codecombat中国游戏网址: http://www.codecombat.cn/ 所有代码为javascript代码分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23.Agrippa防守 loop { var enemy = this.findNearestEnemy(); if(enemy) { // 用 distanceTo 获取与敌人的距离. var distance = this.distanceTo(enemy); // 如果距离小于5米...