力扣hot100 C++(自用01)

暴力解(循环):将目标值减去当前数组值得到一个结果,遍历数组找到结果值对应位置。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n=nums.size();//nums的元素个数
int i,j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)/*已经加过的元素不用再次相加,即计算过nums[0]+nums[1],不用再计算nums[1]+nums[0]*/
{
int r=target-nums[i];//r作为目标值减去当前遍历的元素
if(nums[j]==r)//r元素存在下标
{
int r1=i;
int r2=j;
return {r1,r2};
}
}
}
return {};
}
};
优化解(map):将目标值减去当前数组值得到一个结果,那么该结果数值加上当前数组值就是目标值,通过map记录数组数值与数组下标从而可以直接查找数值和对应下标。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int>mp;//定义map数据结构
int n=nums.size();//nums的元素个数
int i;
for(i=0;i<n;i++)
{
int c=nums[i];//c定义为值
mp[c]=i;//值作为索引建、i作为值
}
for(i=0;i<n;i++)
{
int r=target-nums[i];//r作为目标值减去当前遍历到的元素
if(mp.find(r)!=mp.end()&&mp[r]!=i)//查找是否有r存在当前元素中,且不能是相同数组下标
{
//若存在r,则找到对应下标
int r1=i;
int r2=mp[r];
return {r1,r2};
}
}
return {};
}
};
更多推荐



所有评论(0)