面试题41 和为S的连续正数序列
2016-04-06 13:56
465 查看
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck![b]输出描述:[/b]
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
class Solution { public: vector<vector<int> > v; vector<int> vc; vector<vector<int> > FindContinuousSequence(int sum) { if (sum <= 1) return v; int csum = 0, i = 0; while (i <= sum / 2 + 2) { vector<int>::iterator iter = vc.begin(); if (csum > sum) { csum -= vc[0]; vc.erase(iter); } else if (csum == sum) { if (vc.size() > 1){ v.push_back(vc); } i++; csum += i; vc.push_back(i); } else { i++; csum += i; vc.push_back(i); } } return v; } };
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。[b]输出描述:[/b]
对应每个测试案例,输出两个数,小的先输出。
class Solution { public: vector<int> v; vector<int> FindNumbersWithSum(vector<int> array,int sum) { if (array.size() <= 1) return v; int i = 0, j = array.size() - 1; while (i < j){ if (array[i] + array[j] == sum){ if (v.size() == 0){ v.push_back(array[i]); v.push_back(array[j]); } else{ if (v[0] * v[1] > array[i] * array[j]){ v[0] = array[i]; v[1] = array[j]; } } i++; } else if (array[i] + array[j] < sum) i++; else j--; } return v; } };
相关文章推荐
- 职业规划课第三次作业
- 优秀程序员和普通程序员都是怎样过完一天的
- 线程——《程序员的自我修养》
- 面试题40 数组中只出现一次的数字
- java中常用算法(面试)
- 面试题39 二叉树的深度
- 面试题38 数字在排序数组中出现的次数
- LeetCode(26)-Binary Tree Level Order Traversal II
- 面试题37 两个链表的第一个公共结点
- 面试题36 数组中的逆序对
- FAQ前端面试大杂烩5
- 面试题35 第一个只出现一次的字符位置
- 自增(++)和自减(--)运算符
- 数据库面试题
- 面试题34 丑数
- 关于阿里面试的一个小题(推荐)
- 面试题33 把数组排成最小的数
- XF技术支持实习面试
- 如何成为PHP程序员?
- 如何成为一名真正专业的程序员