目录
1.题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
2.思路
思路一 双重循环
将数组中的 每一个数 依次与 其后面的数 组合与target比较,如果相等直接(题目中说每种输入只有一个答案)返回两个数的位置i,j即可。
思路二 哈希表(还没学,学过之后回来更新)
3.代码实现
C++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i=0;i<nums.size()-1;i++) //外循环从头开始,到倒数第二个数为止
{
for(int j=i+1;j<nums.size();j++) //内循环从i+1开始,到最后一个数为止
{
if(target==nums[i]+nums[j])
{
return {i,j}; //相比 int main()中的“return 0;”返回整数是因为main()函数是用int定义的,
} //而twosum是用vector定义的,vector是无限制的数组,因此要返回一个数组形式即{i,j}。
}
}
return {}; //由于题目一定有一个答案,所以必须返回一个值,否则会报错。
}
};
4.过程中出现的错误
(1)vector中自带的函数.size()可以计算数组的长度(输入数的个数)
我一开始以为sizeof()可以计算数组长度,并且测试数据还过了,提交之后一直显示执行错误。。。
结果sizeof()是计算字节数的,导致计算多了,用了没有赋值的数组部分。
(2)还有一些数组下标的问题,简单模拟一下就能解决。
5.其它相关知识点
class类 (struct结构体)
class tree
{
public:
int left;
char right;
};
tree one;
以前用过几次,大概是这么个格式,类的里面可以定义各种类型的变量,相当于把几个变量联系在一块儿。
可以用one.left或者one.right调用里面的变量。
好像还可以在里面定义函数(目前还不会)