查找数组中和为s的两个数字
来源:互联网 发布:李小璐淘宝店名 编辑:程序博客网 时间:2024/05/18 00:31
题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。
分析:两个指针,一个从数组头部开始向后扫,一个从数组尾部向前扫,如果两个指针指向的数组值的和大于s,则后面的指针向前移,否则前面的指针向后移,直到两个值得和等于s。
#include <stdio.h>bool find(int a[], int len, int sum, int *num1, int *num2){if(a==NULL || len <=0 || num1==NULL || num2==NULL)return false;int ahead = len -1;int behind = 0;while(behind < ahead){if(a[behind]+a[ahead]==sum){*num1 = a[behind];*num2 = a[ahead];return true;}else if(a[behind]+a[ahead]>sum)ahead--;elsebehind++;}return false;}int main(){int sum,num1,num2;int a[] = {1,2,4,7,11,15};int len = sizeof(a)/sizeof(int);int i;printf("数组值为:\n");for(i=0;i<len;i++)printf("%d\t",a[i]);printf("\n");printf("请输入两个整数和的值:\n");scanf("%d",&sum);if(find(a,len,sum,&num1,&num2))printf("数组中%d和%d的值为%d\n",num1,num2,sum);elseprintf("没有找到这样的整数\n");return 0;}
- 查找数组中和为s的两个数字
- 剑指Offer——查找递增数组中和为S的两个数
- 剑指offer 面试题41 递增数组中和为s的两个数字 | 和为s的连续整数序列
- 查找数组中和为某给定值的两个数
- 查找数组中和为特定值的两个数
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字
- 找出排序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字
- 《剑指offer》:[41]数组中和为S的两个数
- 剑指offer-数组中和为S的两个数
- 【从零单排之微软面试100题系列】14之数组中和为s的两个数字
- 面试题41:有序数组,查找和为s的两个元素and 和为s的连续数字
- 【OpenCV学习笔记】之五 RGB图像归一化处理函数,消除线性变化的光照影响
- bitmap的一些操作方法
- fread和fwrite用法详解
- SQL SERVER数据库中的数据类型
- Cassandra1.2.5源码环境搭建
- 查找数组中和为s的两个数字
- C# 渐进
- C# 生成二维码和zxing类库
- 各大OJ题目归类
- 对opencv2.4.5的学习(持续更新中......)
- 集合框架1——Collection系
- 名词,缩略词
- poj find the multiple
- JScript运行批处理命令的做法