Leetcode【1】:Two Sum
来源:互联网 发布:免费云数据库mysql 编辑:程序博客网 时间:2024/04/18 13:07
题目:给一个int数组和target,找到两个数之和=target,返回其下标。(以0开始,并且index1<index2)
1.两层循环暴力解法。时间O(n*n),空间O(1)。不能AC。
class Solution{ public:vector<int> twoSum(vector<int> &numbers, int target){vector<int> ret(2,0);for(int i=0;i<numbers.size();i++){ for(int j=i+1;j<numbers.size();j++) {if(numbers[i]+numbers[j]==target){ ret[0]=i+1; ret[1]=j+1; return ret;} }}return ret;}};
2.考虑到排序可能降低时间开销,但是需要保存原来的index。时间O(n*logn),空间O(n)。AC。
struct Node{int val;int pos;};//保存indexbool comp(const Node & m, const Node & n){return m.val<n.val;}//比较函数class Solution{public:vector<int> twoSum(vector<int> &numbers, int target){int start,end,len;len=numbers.size();start=0;end=len-1;vector<int> res;vector<Node> list;for(int i=0;i<len;i++){Node temp;temp.val=numbers[i];temp.pos=i+1;list.push_back(temp);}//建立新的vector数组,空间花销sort(list.begin(),list.end(),comp);while(start<end){int sum=list[start].val+list[end].val;if(sum>target)end--;else if(sum<target)start++;else{if(list[start].pos>list[end].pos){int tem;tem=list[end].pos;list[end].pos=list[start].pos;list[start].pos=tem;}//要求index1<index2res.push_back(list[start].pos);res.push_back(list[end].pos);return res;}}return res;}};
0 0
- LeetCode 1 - Two Sum
- leetcode 1 Two Sum
- Leetcode【1】:Two Sum
- [leetcode 1] Two Sum
- 【leetcode-1】Two Sum
- [leetcode 1] Two Sum
- [Leetcode] 1 - Two Sum
- LeetCode (1) Two Sum
- LeetCode 1:《Two Sum》
- LeetCode | #1 Two Sum
- leetcode-1 Two Sum
- Two Sum | LeetCode(1)
- [Leetcode]1Two Sum
- leetcode 1 Two Sum
- leetcode #1 Two Sum
- leetcode 1:Two Sum
- LeetCode 1 Two Sum
- leetcode #1 two sum
- 第3章 表、栈和队列
- 2:jdbc 连接步骤及基本用法
- Sql Server中sql语句自动换行
- ProgressBar
- 捉虫记录:OpenCV中的类型问题
- Leetcode【1】:Two Sum
- QT_PC学习_GUI程序设计入门
- MVC 联动 dropdowlist
- 什么时候我能见到你
- 尚学堂马士兵struts2 课堂笔记(三)
- Android应用初体验
- 3:jdbc 连接池,批处理,图片处理等
- PHP <?= Uri::base(false) ?> 无法解析
- 几个常用的javascript框架比较