Datawhale刷题-1-1929-771

题1:两数之和。unordered_map底层数据结构采用哈希表。这里插入的键值分别为nums的值和下标。容易出现问题的点是,插入的键值可能会是重复的。而unordered_map不接受重复键值,会跳过。哈希表的查找时间为O(1)。

class Solution {

public:

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

        unordered_map<int,int>m(nums.size());

        //unordered_map哈希表,不存储重复key

        for(int i=0;i<nums.size();i++)

        {

            m.insert(pair<int,int>(nums[i],i));

        }

        for(int j=0;j<=nums.size();j++)

        {

            auto it=m.find(target-nums[j]);

            if(it!=m.end()&&it->second!=j)

            {

                return{j,it->second};

            }

        }

        return {};

    }

};

问题1929

vector的resize和reserve的区别?前者改变capacity和size,后者仅改变capacity。

class Solution {

public:

    vector<int> getConcatenation(vector<int>& nums) {

        int n=nums.size();

        for(int i=0;i<n;i++)

            nums.push_back(nums[i]);

        return nums;

    }

};

问题771

总结:lambda表达式和for_each

[捕获参数列表](传入参数)mutable exception->返回值类型{函数体}

捕获参数列表一般指在lambda之前已经出现的变量,并在后续函数体中用到的参数,分为值传递和引用传递。mutable修饰符表示可以修改值传递的捕获参数的拷贝(仅改变lambda函数体中的值,但不影响lambda之外的值),exception用来指定抛出的异常。

for_each(first,last,func)在[first,last)范围内将每个元素传入函数func并执行。

class Solution {

public:

    int numJewelsInStones(string jewels, string stones) {

        int num=0;

        for(auto i:jewels)

        for_each(begin(stones),end(stones),[&num,i](int x){(x==i)?num++:0;});

        return num;

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容