Two Sum
Given an array of integers, find two numbers such thatthey add up to a specific target number.
The function twoSum should return indices of the twonumbers such that they add up to the target, where index1 must be less thanindex2. Please note that your returned answers (both index1 and index2) are notzero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
乍看到这题,想必学过编程的小白都会想到用暴力破解,但试过之后发现数据量大之后会爆炸,超时。
但是整体思路还是不变的。
暴力破解的思路是: 有了A之后,就寻找一个B,使得满足A+B=C,且A和C是已知的,那么就是寻找B=C-A。
既然用循环寻找B会超时,那么使用一个寻找起来很快的数据结构是不是会好点呢?
这里我就想到了c++里的map(当然,并不是说只能用map)了
第一部分
Map的特点是:
1、支持快速查找,查找的复杂度基本是Log(N)
2、快速插入,快速删除,快速修改
因此这里复习一下如何使用map
第二部分
Map采用的是红黑树实现的
因此,我也会趁此机会复习一下简单的红黑树实现。
第三部分
虽然知道了重点在于查找的速度,但是普通的map可是不支持重复的key的啊?我们如何利用map来解决这个问题呢?
第一部分、如何使用stl中的map
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
第一部分
1.1特点:
-
map中的数据类型是 key-value 结构,且key和value的类型可以是任意类型。
-
在map增加或删除元素十分容易
-
可以根据key的值修改value,但不能修改key的值
-
map的查询时间复杂度为LogN,也就是如果包含1000个记录,查询次数最多为 10次,1,000,000个记录,最多查找20次。
1.2使用:
1.2.1加载头文件
与使用stl 中其他数据结构类似,都是加上相应名称的头文件
#include<map>
1.2.2map对象的声明(构造函数)
方法一、
比如 map<int, int> Map 即声明了一个key为int类型, value为int类型的对象Map
比如