Leetcode 两数之和

本文分享了作者第一次解决LeetCode上“两数之和”问题的经历,包括问题描述、解题思路及C++代码实现。文章还介绍了Vector的基本用法及引用的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode 两数之和

终于刷了第一道leetcode,虽然难度是简单,但做的时候还是遇到了很多问题,最后的代码也还有很多可以优化的地方,特此记录一下,跟大家一起学习!

题目描述:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 为目标值的那两个整数,并返回它们的数组下标

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

C++解题代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
       int a = nums.size();
       vector<int> sub;
          for(int i=0;i<(a-1);i++)
          {
            for(int j=i+1;j<a;j++)
            {
               int sum = nums[i]+nums[j];
                if(target==sum)
                {
                   sub.push_back(i);
                   sub.push_back(j);
                   
                }
            }
          }
      return sub;
    }
};

题目解析:

注意题目描述中加粗的部分。

注意点如下:

  • 数组内的值以及目标值皆为整数。
  • 目标是寻找数组内和为目标值的两个整数,输出这两个整数在数组内的下标。具体可参考实例。
  • 只考虑每种输入只对应一个答案即可,即输出结果唯一且不能是数组某一元素的自身之和。例如输入nums = [6,2,10,8], target = 12.则输出应该是[1,2],而不是[0,0].

代码解析:

leetcode上使用C++解题默认会给出如下的代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {

    }
};
class(类)

最开始看着有点不习惯,以为会给出int main()这种,这里给出的是一个类,最终执行的时候应该会调用这个类进行测试。

大家对类这种类型不太了解的话,可以参考菜鸟教程的内容:

C++ 类&对象

Vector(向量)

在类里给出了一个返回类型是vector< int >类型的函数twosum,vector这个之前没有接触过,所以刚看到的时候非常头疼,之后在菜鸟教程以及一些优快云博客里学习了关于Vector的一些知识。在这里简单介绍一下:

Vector(向量)就是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

我的理解就是Vector(向量)是一个长度不定且可以存储不同类型数据的数组。且Vector除了可以像数组一样访问数据,还可以通过一些特殊语句更加便捷地删除/添加数据。

关于Vector有很多很有用的操作,具体可以参考下面这篇博客:

Vector的详细用法

在最终的解答中,我用到了nums.size()这个操作,意思就是返回nums中元素的个数,通过这个操作就可以知道nums中有多少个元素。后面还用到了sub.push_back(i)这个操作,即在数组的最后添加数据i。

&(引用)

之后就是twosum这个函数的输入参数,一个是int target即我们的整数目标值,另一个是vector< int >& nums,这个还蛮有意思,我的理解是传入了一个vector< int >类型的数组, 这里的&应该是引用的意思,大家可以理解为在主函数中有一个实参nums,然后此处是这个实参的复制体。引用跟指针的作用类似,但也有区别。引用跟指针的具体内容可以参考下面的博客:

C++中的&和&&

C++中引用传递与指针传递的区别

实现

理解了上面的内容之后,实现起来就比较简单了,我用的方法比较简单粗暴,即将数组里的元素两两求和,使用了两个for循环来实现,然后在内层循环里直接判断和是否跟目标值target相等,若相等则将这两个下标存到另一个新的数组中,最后输出这个数组即可。

运行结果

twosum.png

最后执行结果如上,可以看到执行用时很拉跨,关于这道题还有很多更好的解法,评论里也有很多优秀的解答,大家可以学习参考,我也继续学习一下!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值