LeetCode.1(两数之和) - 简单
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
-
代码:
//2020_04_17 //暴力法写着简单,但时间复杂度为O(n^2) //使用哈希只需遍历1遍时间复杂度为O(n) class Solution { public: vector<int> twoSum(vector<int> &nums, int target) { vector<int> res{0, 0}; //结果容器 unordered_map<int, int> um; //哈希表(值,下标) for (int i = 0; i < nums.size(); i++) //遍历容器元素 { auto it = um.find(target - nums[i]); //查找另一个元素 if (it != um.end()) //如果找到 { res[0] = it->second; //输出其下标 res[1] = i; //输出当前遍历的元素下标 return res; //返回 } um[nums[i]] = i; //没找到则将该元素加入哈希表 } return res; } };
-
结果: