力扣——哈希——1.两数之和

题目

解法

1、暴力

初始

复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans={};
        int len=nums.size();
        for(int i=0;i<len;++i)
        {
            for(int j=0;j<len;j++)
            {
                if((nums[i]+nums[j])==target)
                {
                    ans[0]=i;
                    ans[1]=j;
                    return ans;
                }
                else
                {
                    continue;
                }
            }
        }
        return ans;
    }
};

错误

修改后

复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans={};
        int len=nums.size();
        for(int i=0;i<len;++i)
        {
            for(int j=i+1;j<len;j++)
            {
                if((nums[i]+nums[j])==target)
                {
                    ans.push_back(i);
                    ans.push_back(j);
                    return ans;
                }
            }
        }
        return ans;
    }
};

2、哈希

思路

使用哈希表,遍历map表

查询标准值减去当前正在查的值的差在哈希表中是否存在,如果存在,说明这一对就是要找的值。直接返回即可

如果不存在,因为这是数组内的第i个值,所以哈希表的值就是i,索引是具体的值,如hashtable[nums[i]]=i;,里面的i是在查看nums数组内的第i个值

find------>ite->first--->键值;ite->second--->索引

例子

代码

复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int len=nums.size();
        unordered_map<int,int> ans;
        for(int i=0;i<len;++i)
        {
            //寻找补数是否在哈希表内
            auto ite=ans.find(target-nums[i]);
            //如果哈希表内没到结尾就找到了这个补数,那这个补数和当前的i就是结果,直接返回即可
            if(ite!=ans.end())
            {
                //返回
                return {ite->second,i};
            }
            //如果哈希表没找到,原表的第i个位置的值为nums[i],则将这个值作为下标放入ans的位置,值为i
            ans[nums[i]]=i;
        }
        //如果没找到,返回空值
        return {};
    }
};
相关推荐
Not Dr.Wang42211 小时前
自动控制系统稳定性研究及判据分析
算法
VT.馒头11 小时前
【力扣】2722. 根据 ID 合并两个数组
javascript·算法·leetcode·职场和发展·typescript
ffqws_11 小时前
A*算法:P5507 机关 题解
算法
执着25911 小时前
力扣hot100 - 108、将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
2501_9011478311 小时前
学习笔记:单调递增数字求解的迭代优化与工程实践
linux·服务器·笔记·学习·算法
AI科技星11 小时前
张祥前统一场论核心场方程的经典验证-基于电子与质子的求导溯源及力的精确计算
线性代数·算法·机器学习·矩阵·概率论
kebijuelun12 小时前
ERNIE 5.0:统一自回归多模态与弹性训练
人工智能·算法·语言模型·transformer
历程里程碑12 小时前
普通数组----最大子数组和
大数据·算法·elasticsearch·搜索引擎·排序算法·哈希算法·散列表
52Hz11812 小时前
力扣230.二叉搜索树中第k小的元素、199.二叉树的右视图、114.二叉树展开为链表
python·算法·leetcode