面试OR笔试23——数组和
2017-09-02 09:24
246 查看
1 题目及要求
1.1 题目描述
1、输入一个递增排序的数组和一个数字s,在数组中查找两个数字,使得他们之和正好是s。如果存在多对数字之和为s,输出任意一对即可。2、输入一个正整数数组和一个数字s,打印所有和为s的连续序列。
2 解答
2.1 题目分析
1、先考虑首尾的两个数字之和,如果等于s则以完成;如果小于s,则把第一个元素换成其后面紧接着的元素;否则把最后一个元素换成其前面紧接着的元素。。。。。。。2、k1和k2分别记录连续位置元素的起止位置(初始都指向第一个元素),若其和大于s则k1后移一位,若小于则k2后移一位。。。。。。。直到k2到结尾或者k1超过k2。
2.2 代码
bool twoSum(int *v, int vn, int sum, int *out){ if(!v || vn < 1 || !out) return false; for(int k1(0),k2(vn-1);k1<=k2;){ if(v[k1]<sum-v[k2]) ++k1; else if(sum-v[k1]<v[k2]) --k2; else { out[0] = v[k1]; out[1] = v[k2]; return true; } } return false; } int continueSum(int *v, int vn, int sum){ if(!v || vn<1) return 0; int res(0); sum -= v[0]; for(int k1(0),k2(0);k1<=k2 && k2<vn;){ if(sum<0){ sum += v[k1]; ++k1; } else if(0<sum){ ++k2; sum -= v[k2]; } else{ ++res; cout << k1 << ' ' << k2 << endl; ++k2; sum -= v[k2]; } } return res; }
相关文章推荐
- 面试OR笔试28——数组中重复的数字
- 面试OR笔试20——数组中的逆序对
- 面试OR笔试42——划分数组
- 面试OR笔试22——数组中只出现一次的数字
- 【笔试or面试】腾讯2014校园招聘(广州站)
- 面试笔试问题总结(五)—数组、链表、二叉树
- 面试宝典 经典笔试 题 之用 java 实现 旋转数组
- C++指针数组和数组指针--笔试面试系列
- 符串切割成数组等面试出现的笔试题
- 【笔试or面试】笔试题、面试题和平时小知识点的积累
- 面试OR笔试43——走迷宫
- 【笔试or面试】阿里巴巴2014校招笔试(哈尔滨)
- 面试OR笔试45——实现next_permutation
- Java面试笔试指南(四)---基本类型、字符串、数组与运算
- 程序员笔试面试算法题系列--数组
- 面试OR笔试1——RNA嵌套
- 面试OR笔试13——字母数字排序
- 面试OR笔试26——求1到n之和
- Company BDui 面试 笔试 : 从10个已按从大到小排列好的数组中,求top 15个最大的数
- 【笔试or面试】腾讯2014校园招聘(广州站)