力扣——哈希——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,索引是具体的值,如hashtablenums\[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 {};
    }
};
相关推荐
科技大视界8 小时前
投资AI项目,传统尽调不够用了——李章虎律师拆解算法、数据、算力三大雷区
人工智能·算法·数据挖掘
郝学胜-神的一滴9 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
Irissgwe9 小时前
算法滑动窗口
数据结构·算法
怪兽学LLM9 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:分治递归思路详解
算法·leetcode·职场和发展
可编程芯片开发9 小时前
基于PI控制的三相整流器控制系统的simulink建模与仿真,包含超级电容充电和电机
算法
酿情师9 小时前
区块链共识算法深度拆解:PoW、PoS、PBFT、Raft 原理解析
算法·区块链·共识算法
hansang_IR9 小时前
【记录】「SCOI2016」三道模拟赛/26.7.12
c++·算法
QQ骞9 小时前
【ECU-HIL 嵌入式车载软件测试学习路线和面试描述方式(1)】
学习·面试·职场和发展
退休倒计时10 小时前
【每日一题】LeetCode 39. 组合总和 TypeScript
算法·leetcode·typescript
不是az10 小时前
力控相关知识点
算法·机器学习·最小二乘法