剑指offer之和为s的数组

举报
chenyu 发表于 2021/07/27 00:05:57 2021/07/27
【摘要】 1 问题 输入一个递增排序数组和数字和s,在数组里面找2个数,他们的和是s,如果有多对,只需要输出一对。 比如数组{1, 2, 4, 7, 11, 15},我们输出4 ,11               2 思路 我们定义2个首尾指针,先是1+15,大于15,然后我们尾巴指针左移一下,然...

1 问题

输入一个递增排序数组和数字和s,在数组里面找2个数,他们的和是s,如果有多对,只需要输出一对。
比如数组{1, 2, 4, 7, 11, 15},我们输出4 ,11

 

 

 

 

 

 

 

2 思路

我们定义2个首尾指针,先是1+15,大于15,然后我们尾巴指针左移一下,然后就是1+11 小于15,然后首指针右移动一下,2+11,依次类推。
 

 

 

 

 

 

3 代码实现


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define true 1
  4. #define false 0
  5. int findNumber(int *a, int len, int sum, int *num1, int *num2)
  6. {
  7. int result = false;
  8. if (NULL == a || len < 1 || NULL == num1 || NULL == num2)
  9. {
  10. return result;
  11. }
  12. int start = 0;
  13. int end = len - 1;
  14. while (end > start)
  15. {
  16. *num1 = a[start];
  17. *num2 = a[end];
  18. int curSum = *num1 + *num2;
  19. if (curSum == sum)
  20. {
  21. result = true;
  22. break;
  23. }
  24. else if (curSum > sum)
  25. {
  26. --end;
  27. }
  28. else
  29. {
  30. ++start;
  31. }
  32. }
  33. return result;
  34. }
  35. int main()
  36. {
  37. int a[] = {1, 2, 4, 7, 11, 15};
  38. int num1 = 1;
  39. int num2 = 3;
  40. int result = findNumber(a, sizeof(a) / sizeof(int), 15, &num1, &num2);
  41. if (result == 1)
  42. {
  43. printf("the num1 is %d the num2 is %d\n", num1, num2);
  44. }
  45. else
  46. {
  47. printf("do not find the two number in numbers");
  48. }
  49. return 0;
  50. }

 

 

 

 

 

4 运行结果

the num1 is 4 the num2 is 11
 

 

 

 

5 代码优化


  
  1. while (end > start)
  2. {
  3. int curSum = a[start] + a[end];
  4. if (curSum == sum)
  5. {
  6. *num1 = a[start];
  7. *num2 = a[end];
  8. result = true;
  9. break;
  10. }
  11. else if (curSum > sum)
  12. {
  13. --end;
  14. }
  15. else
  16. {
  17. ++start;
  18. }
  19. }

 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/98770167

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。