LeetCode
来源:互联网 发布:mac梦幻西游更新 编辑:程序博客网 时间:2024/05/13 08:24
1. Two Sum Problem's Link
Problem's Link
----------------------------------------------------------------------------
Mean:
给定一个数组nums和一个数target,求:id1和id2. (nums[id1]+nums[id2]=target,id1和id2为数组nums两个不同的下标).
注意:nums中元素可重.
analyse:
如果nums中没有重复元素,那么可以用map做.
由于有重复元素,需要用multimap.
注意:使用map时,需要用count(key)来检测是否存在key值,否则会出现错误.
Time complexity: O(N*logN)
view code
/**
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights reserved.
* -----------------------------------------------------------------
* Author: crazyacking
* Date : 2015-01-29-14.24
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long(LL);
typedef unsigned long long(ULL);
const double eps(1e-8);
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
int cnt=0;
vector<int> ans;
multimap<int,int> mp;
for(auto p:nums)
mp.insert(make_pair(p,cnt++));
for(auto p:mp)
{
if(mp.count(target-p.first)>0)
{
multimap<int,int>::iterator it1,it2;
if((p.first==target-p.first)&&(mp.count(p.first)==2))
{
it1=mp.find(p.first);
ans.push_back((*it1).second+1);
mp.erase(it1);
it2=mp.find(p.first);
ans.push_back((*it2).second+1);
break;
}
it1=mp.find(p.first);
it2=mp.find(target-p.first);
ans.push_back((*it1).second+1);
ans.push_back((*it2).second+1);
break;
}
}
sort(ans.begin(),ans.end());
return ans;
}
};
int main()
{
int n;
while(cin>>n)
{
vector<int> ve;
for(int i=0,tmp;i<n;++i)
{
cin>>tmp;
ve.push_back(tmp);
}
int target;
cin>>target;
Solution a;
vector<int> ans=a.twoSum(ve,target);
for(auto p : ans)
cout<<p<<endl;
}
return 0;
}
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights reserved.
* -----------------------------------------------------------------
* Author: crazyacking
* Date : 2015-01-29-14.24
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long(LL);
typedef unsigned long long(ULL);
const double eps(1e-8);
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
int cnt=0;
vector<int> ans;
multimap<int,int> mp;
for(auto p:nums)
mp.insert(make_pair(p,cnt++));
for(auto p:mp)
{
if(mp.count(target-p.first)>0)
{
multimap<int,int>::iterator it1,it2;
if((p.first==target-p.first)&&(mp.count(p.first)==2))
{
it1=mp.find(p.first);
ans.push_back((*it1).second+1);
mp.erase(it1);
it2=mp.find(p.first);
ans.push_back((*it2).second+1);
break;
}
it1=mp.find(p.first);
it2=mp.find(target-p.first);
ans.push_back((*it1).second+1);
ans.push_back((*it2).second+1);
break;
}
}
sort(ans.begin(),ans.end());
return ans;
}
};
int main()
{
int n;
while(cin>>n)
{
vector<int> ve;
for(int i=0,tmp;i<n;++i)
{
cin>>tmp;
ve.push_back(tmp);
}
int target;
cin>>target;
Solution a;
vector<int> ans=a.twoSum(ve,target);
for(auto p : ans)
cout<<p<<endl;
}
return 0;
}
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- box-sizing布局学习笔记
- vtk图像的读写
- uva 10158War
- Java集合类框架学习 5.2 —— ConcurrentHashMap(JDK1.7)
- 20个Linux命令及Linux终端的趣事
- LeetCode
- LeetCode
- Lock与synchronized测试区别
- LeetCode
- LeetCode
- LeetCode
- LeetCode
- LeetCode
- c#中取整