博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode - 1. Two Sum
阅读量:6934 次
发布时间:2019-06-27

本文共 1926 字,大约阅读时间需要 6 分钟。

1. Two Sum 

 ----------------------------------------------------------------------------

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;
}

 

转载地址:http://pvgjl.baihongyu.com/

你可能感兴趣的文章
python ftp的上传和下载
查看>>
python前端HTML和CSS入门
查看>>
关于Nginx支持.htaccess的分析
查看>>
GetSchema取得数据库架构,无法取得列的Description属性的解决方法
查看>>
document.body.scrollTop or document.documentElement.scrollTop
查看>>
【机器学习-西瓜书】一、绪论
查看>>
js 验证表单 js提交验证类
查看>>
Java中写入文件时换行符用"\r\n"、"\n"、"\r"?
查看>>
cmd for 循环拷贝文件
查看>>
[Cocoa]深入浅出Cocoa之多线程NSThread
查看>>
c++,不能声明为虚函数的函数
查看>>
WSHPSRS-匹克选择列表生成器-SRS(R12.2.3)
查看>>
Django REST framework API 指南(25):状态码
查看>>
浅谈 LiveData 的通知机制
查看>>
React App项目页面进出场动画
查看>>
XXL-CONF v1.4.1 发布,分布式配置管理平台
查看>>
JavaEE进阶知识学习-----SpringCloud(四)Eureka集群配置
查看>>
JB的测试之旅-今年的路,怎么走?
查看>>
mac系统下安装、启动、停止mongodb
查看>>
逐行阅读redux源码(二)combineReducers
查看>>