leetcode1——两数之和

本文介绍了LeetCode上经典题目“两数之和”的两种解决方案:暴力法和哈希函数法。暴力法通过双重循环查找两个数的组合;哈希函数法则利用哈希表快速查找配对元素,提高效率。

leetcode刷题

两数之和

暴力法

从第一个元素开始向后查找,两数相加若等于target,则返回两者下标,否则继续向后查找。

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

哈希函数法

创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hashtable;
        for(int i=0;i<nums.size();++i){
            auto it=hashtable.find(target-nums[i]);
            if(it!=hashtable.end()){
                return{it->second,i};
            }
            hashtable[nums[i]]=i;
        }
        return{};
    }
};

(太久没有写过代码很多细节都忘记了,把一些常用的函数&容易犯错的点记录在这里。)
1.vector——动态数组。
2.数组长度使用size()函数(c++),length(java)。
3.c++不能return数组,但可以返回指针。
return{}中{}代表代表一个空的vector<vector>,size为0。
4.哈希表
创建表 unordered_map<key,value> Map_name;
插入元素 ①a[key]=value;
② Map_name.insert(pair<int,int>(key,value));
③ unordered_map<int,int>Map_name{{key1,value1},{key2,value2}};

查找键值 table_name.find(key)
参数:它以键作为参数。
返回值:如果给定的键存在于unordered_map中,则它向该元素返回一个迭代器,否则返回映射迭代器的末尾。
5.C++11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值