leetcode算法第一题-两数相加

本文详细解析了在给定数组中寻找两数之和等于目标值的算法,包括暴力法和利用hash表的高效解决方案,展示了两种方法的C++代码实现。

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

题目描述:给定一个整数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们数组下标。提示:不能重复利用整数组中同样的元素。
第一种方法:暴力法
基本思路:假设nums数组中有n个先找到nums数组中的第一个整数,然后从第二个整数到第n个整数之中找到与第一个整数和为target的整数。如果找到了,返回两个数的数组下标。如果没找到,则先找到第二个整数,再从第三个整数到第n个整数之间找到与第二个整数和为target的整数,返回两个整数的下标。以此类推。
c++代码实现如下:

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

第二种方法:利用hash表
基本思路:遍历数组nums,对每个nums[i],取得b=res-b[i],在hash表中寻找b,一旦找到,返回i和b在nums中的下标;如果没有找到,把b放到hash表里。
c++代码实现如下:

class solution{
public:
       vector<int>twoSum(vector<int>&nums,int target){
       unordered_map<int,int>hash;
       vector<int>result;
       int numsSize=int(nums.size());
       for(int i=0;i<numsSize;i++){
       int numberToFind=target-nums[i];
       if(hash.find(numberToFind)!=hash.end()){
       result.push_back(hash[numberToFind]);
       result.push_back(i);
       return result;
}
hash[nums[i]]=i;
}
return result;
}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值