两数之和
一、题目
原题目如下: [乐扣-两数之和](https://leetcode-cn.com/problems/two-sum/)
1、题目描述
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
2、示例
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
3、代码函数部分
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
};
二、题解
(这个方法大概就是最先想到,最不用动脑子的方法吧)
1、思路
穷举出所有的数对,同一个数字不可以用两遍,也就是一个数对,不可以是相同的一个数字,将数对的值加起来,与目标值比较。若相同就返回数对所在数组的下标,若不相同,就继续。若找不到就返回为空
2、代码实现
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for(i=0;i<nums.size()-1;i++)
{
for( j=i+1;j<nums.size();j++)
{
int res=nums[i]+nums[j];
if(res==target)
{
return {i,j};
}
}
}
return {i,j};
}
};
(2.0版本,有错误)
3、遇到的问题
首先第一个问题,因为以前没怎么接触过vector,或者接触的时候,就跳过了,换用了别的方法。所以对于vector可以说是陌生的。vector通俗的理解就是动态数组吧。那么该怎么遍历数组,知道数组里面有多少元素呢?在这里学的方法是,利用nums.size()知道数组里面有多少元素。然后进行遍历。 第二个问题,其实最开始我的代码不是这样的。(1.0版本)
第九行return(i,j);会报错 报错结果如下:
solution.cpp: In member function twoSum
Line 9: Char 30: error: could not convert '((void)0, j)' from 'int' to 'std::vector<int>'
return (i,j);
真的明白为什么return{i,j}不对,return{i,j}就对了,现在也不明白,有心人解答一下啊啊啊 现在在修正的时候发现,二改的代码也不对。最后的返回,如果没有就应该为空,所以第十三行代码应该改为return{}; 最后正确的版本应该是(3.0)
class Solution {
public:
vector<int> twoSum(vector<int>& nums,int target) {
int i,j;
for(i=0;i<nums.size()-1;i++){
for( j=i+1;j<nums.size();j++){
int res=nums[i]+nums[j];
if(res==target) {
return {i,j};
}
}
}
return {};
}
};
4、时间及内存消耗
执行用时 | 内存消耗 | 语言 |
---|---|---|
184ms | 9.3MB | Cpp |
来源:oschina
链接:https://my.oschina.net/u/4443770/blog/3158006