5月28日刷题笔记——数组

5月28日刷题笔记——数组

题目1:1. 两数之和(简单题)

第二次做这题了,一直用的双循环暴力枚举。

这里参考题解的哈希表方式复现代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        // 定义哈希表,key存放数组元素,value存放元素下标
        unordered_map<int, int> hashtable;
        for(int i = 0; i < nums.size(); i++){
            // 定义指针存放find()函数查找结果,查看(target - nums[i])目标数-当前数值是否有对应的键值对
            auto it = hashtable.find(target - nums[i]);
            // 查找成功则返回值不等于end()
            if(it != hashtable.end()){
                // 返回数组下标
                return {it->second, i};
            }
            hashtable[nums[i]] = i;
        }
        return {};
    }
};

总结知识点:

1.设hash.find()的返回为it时,it->first()为key,it->second()为value

题目2:88. 合并两个有序数组(简单题)

我的题解:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int i = 0;
        for(i = 0; i < n; i++){
            nums1[m + i] = nums2[i];
        }
        sort(nums1.begin(), nums1.end());
    }
};

总结:

1.需要注意的是void函数,不需要return nums1,也不用打印,排好就好了这里。

你可能感兴趣的:(leetcode,哈希算法,算法)