【2020-11-12】1. 两数之和

学长说的好,“解决焦虑的根本途径是刷Leetcode”。

1. 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路

由于是第一次刷题,数据结构基本都已经忘的差不多了,只记得最基础的树、链表之流,此题最关键的是解决如何寻找target - num[i]nums中的位置,做题时没想到合适的解决办法,只能从最暴力的O(n2)下手。
如果将nums中的全部元素求和,在区分两个相加数位置 最蠢 的情况下,会得到一个N* N的矩阵。在此基础上,不区分两个加数 第二蠢 的情况下,只取N* N矩阵的上三角矩阵(右上),会节省一半的运算量,但是时间复杂度仍然保持在O(n2)。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans(2);                                                               //此处可以不用额外定义一个vector
        for(int i = 0; i < nums.size()-1; i++){
            for(int j = i+1; j < nums.size(); j++){
                if(nums[i] + nums[j] == target){
                    ans = {i, j};
                    return ans;                                                           //return {i, j};
                } 
            }
        }
        return ans;                                                                       //return {};
    }
};

实际上这里问题的本质是寻找一种有键值关系数据结构,这里的利用键值关系来优化寻找target - num[i]时间复杂度。之前一直认为Python中的字典的键值之间没有任何关系,在此悔过

Game Changer: Hash Table - 哈希表

哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。
有两种不同类型的哈希表:哈希集合哈希映射
哈希集合是集合数据结构的实现之一,用于存储非重复值
哈希映射是映射数据结构的实现之一,用于存储(key, value)键值对
标准模板库的帮助下,哈希表是易于使用的。大多数常见语言(如Java,C ++ 和 Python)都支持哈希集合和哈希映射。
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/hash-table/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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