剑指Offer——查找递增数组中和为S的两个数

来源:互联网 发布:ch341a编程器软件1.29 编辑:程序博客网 时间:2024/05/22 02:07

主要思路为:

定义两个指针一个指向头一个指向尾,在while循环里求头尾和,如果等于S则输出,大于S头指针--,小于S尾指针++。

程序在vs2015中调试运行无误

#include "stdafx.h"#include<iostream>using namespace std;bool FindTheTwoNum(int data[], int len, int *num1, int *num2 ,int sum){ bool found = false; if ((NULL == data) || (len < 2) || (NULL == num1) ||(NULL == num2))  return found; int *start = data; int *end = &data[len - 1]; while (start < end) {  long long curSum = *start + *end;  if (curSum == sum)  {   *num1 = *start;   *num2 = *end;   found = true;   break;  }  else  {   if (curSum>sum)    end --;   else    start ++;  } } return found;}int main(){ const int length = 10; int data[length] = {0,1,2,3,4,5,6,7,8,9}; int sum = 7; int a = 0; int b = 0; if (FindTheTwoNum(data, length, &a, &b, sum))  printf("a is %d, b is %d, a+b = %d", a, b, sum); else  printf("数组中不存在和为%d的两个数",sum); while (1); return 0;}



0 0