两数和-输入已排序的数组-LintCode
来源:互联网 发布:转行程序员 编辑:程序博客网 时间:2024/06/06 09:19
给定一个已经按升序排列的数组,找到两个数使他们加起来的和等于特定数。
函数应该返回这两个数的下标,index1必须小于index2。注意返回的值不是 0-based。
注意事项:
你可以假设每个输入刚好只有一个答案
样例:
给定数组为 [2,7,11,15] ,target = 9
返回 [1,2]
#ifndef C608_H#define C608_H#include<iostream>#include<vector>#include<map>#include<algorithm>using namespace std;class Solution {public: /* * @param nums: an array of Integer * @param target: target = nums[index1] + nums[index2] * @return: [index1 + 1, index2 + 1] (index1 < index2) */ vector<int> twoSum(vector<int> &nums, int target) { // write your code here vector<int> res(2, 0); map<int, int> m; int len = nums.size(); for (auto c : nums) m[c]++; int pos1 = 0; //找到i,满足m中存在target-nums[i] for (int i = 0; i < len; ++i) { m[nums[i]]--; int num = target - nums[i]; if (m.find(num) != m.end() && m[num]>0) { pos1 = i; break; } m[nums[i]]++; } int pos2 = 0; //逆序查找等于target-nums[pos]的位置 for (int j = len - 1; j >= 0; --j) { if (nums[j] == target - nums[pos1]) { pos2 = j; break; } } res[0] = pos1 + 1; res[1] = pos2 + 1; return res; }};#endif
阅读全文
0 0
- 两数和-输入已排序的数组-LintCode
- 两排序数组的中位数(LintCode)
- 已有一个已经排好序的数组,输入一个数,要求按照原来排序的规律将它插入数组中
- LintCode:两数组的交
- LintCode:两数组的交
- 两数组的交-LintCode
- lintcode 两数组的交
- LintCode-两数组的交集
- LintCode-两数组的交
- Lintcode 两数组的交
- LintCode 两数组的交
- LintCode(两数组的交)
- 两数组的交-LintCode
- 求一个已排序旋转数组中的最小的数
- 算法讨论(七)--已排序数组中寻找两个数,其和等于给定的数
- 已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中
- 已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中
- 已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。
- 基于Spring的 Redis工具类
- gdb调试Go,info goroutines
- 再谈连接数据库
- 树型DP基础题目总结
- 关系数据库规范化理论---范式
- 两数和-输入已排序的数组-LintCode
- vue2.0 父子传值,子父传值
- 软件设计师考试
- 顺序表作业
- PIPE
- Leetcode206
- Unable to inject views for 。。。。
- 三级菜单
- spring data jpa使用错误记录