题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
题目分析
关于示例程序
其中包含动态数组
在调用函数时数据已经储存在变量中
vector
vector
std::vector 是 C++ 标准库中的一个容器,用于存储动态大小的数组。
1 | class Solution { |
解答
暴力法
没两个数的组合都试一遍,一路遍历过去
1 | class Solution { |
中途出现过的错误:
- size函数使用错误:写成nums.size;
- for循环里的返回类型没想到:既然是返回数组,就要用大括号
- 忘记给函数twoSum()添加返回值:返回值为数组,则用“{}”,而不是0或其他什么
哈希表法
哈希表特点:快速查找、插入和删除,并且不关心键的顺序
直接拿target-当前所指的数,如果差在数组中可以找到,则返回这两个数的索引
而遍历的话,则要O(N),时间复杂度高。如果用哈希表,把每个元素作为key,索引作为value,直接查表的话,就是O(1)
哈希表用法:
1 | unordered_map<int, int> hashtable;//创建哈希表 |
1 | class Solution { |
一些补充和辨析
- nums.size()与len(nums)的区别:
nums.size()主要用于 C++ 语言,nums 通常是 std::vector 类型的对象,std::vector 是 C++ 标准库中用于表示动态数组的容器。
len(nums)主要用于 Python 语言,nums 可以是 Python 中的列表(list)、元组(tuple)、字符串(str)等可迭代对象,这些对象在 Python 中都可以使用 len() 函数来获取其长度。 - 在for里定义了变量i,新的for是否要再定义一遍:c++与java需要,python不需要