欢迎光临散文网 会员登陆 & 注册

Leetcode 刷题Day1(1/2)

2022-03-29 15:21 作者:我喜欢喝一点点  | 我要投稿
  1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。


你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。


你可以按任意顺序返回答案。


①暴力解法(太久没敲代码了。。差点忘记vector咋用了,屑啊)

两层for循环套 低内存高时间复杂度

class Solution {

public:

    vector<int> twoSum(vector<int>& nums, int target) {

        int length=nums.size();

        int i,j;

        for(int i=1;i<=length;i++){

            for(int j=0;j<i;j++){

                if(nums.at(i)+nums.at(j)==target){

                    vector<int> v;

                    v.push_back(j);

                    v.push_back(i);

                    return v;

                }

            }

        }

        vector<int> v={j,i};

        return ;

    }

};

②哈希表

哈希表键值对

Object put(Object key, Object value)
将指定 key 映射到此哈希表中的指定 value。

Object get(Object key)
 返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。

Object remove(Object key)
从哈希表中移除该键及其相应的值。


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;//如果哈希表中没有想要的数字,则把该数字加入哈希表中,留给后面i对应的数字查找。

        }

        return {};

    }

};


//E.g.

//nums[3,2,4] target=6

//hashtable中 <int,int>对应<第i个数字的值,i>

//i=0 hashtable中没有3,将3插入哈希表 hashtable[3]=0 hashtable={<3,0>}

//i=1 hashtable中没有2,将2插入哈希表 hashtable[2]=1 hashtable={<3,0>,<2,1>}

//i=2 hashtable中有2,2+4=6,则返回键2对应的value值1,最后返回[1,2]


Leetcode 刷题Day1(1/2)的评论 (共 条)

分享到微博请遵守国家法律