和为s的两个数字
2015-02-02 21:10
78 查看
1.问题描述
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s,如果有多对数字的和等于s,输出任意一对即可。(来自《剑指offer》)
2.分析
首先想到的可能是穷举,但是这样的话就会浪费掉递增排序的这一性质,并且时间复杂度时o(n2) ,因为他是递增的 ,我们可以设置两个指针一个指向头一个指向尾。然后 求和 如果等于的话,就得到了一对答案,如果大于,那我们就向前移动尾指针,如果小于我们就向后移动头指针,通过这种方法来找答案时间复杂度低。
3.代码
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s,如果有多对数字的和等于s,输出任意一对即可。(来自《剑指offer》)
2.分析
首先想到的可能是穷举,但是这样的话就会浪费掉递增排序的这一性质,并且时间复杂度时o(n2) ,因为他是递增的 ,我们可以设置两个指针一个指向头一个指向尾。然后 求和 如果等于的话,就得到了一对答案,如果大于,那我们就向前移动尾指针,如果小于我们就向后移动头指针,通过这种方法来找答案时间复杂度低。
3.代码
void FindNumbersWithSum(int* array,int length,int* num1,int* num2,int sum) { if (array == NULL || length <= 0 || num1 == NULL || num2 == NULL) { return; } int end = length - 1; int start = 0; while (start < end) { int result = array[end] + array[start]; if (result == sum) { *num1 = array[start]; *num2 = array[end]; return; } else if(result > sum) { end --; } else { start ++; } } }
相关文章推荐
- 二维数组矩阵查询,输入的第一行为两个整数代表将要输入的矩阵的行数和列数,输入的第二行代表要查找的数字。
- 在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类。这两个类用于高精度计 算,其中BigInteger类是针对大整数的处理类,而
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- Jquery JS 正确的比较两个数字大小的方法
- 剑指Offer之和为S的两个数字
- 不允许用大于号小于号,比较任意两个数字大小
- C#中为什么两个函数对全角半角数字字符的处理方式不一样
- 学C语言_指针_2_经典指针程序_互换两个数字
- 给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
- 剑指offer:和为S的两个数字
- 面试题41-1:和为s的两个数字
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 判断两个字符串内数字是否相同,向量相同的C++程序。
- 查找数组中两个数,它们的和与数组中某个数字相等
- 和为s的两个数字
- 两个数字相加
- EditText两个数字自动加空格
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
- 九度笔记之 1352:和为S的两个数字
- 剑指offer---和为s的两个数字VS和为s的连续正数序列