LeetCode hot 100—1
记录自己的刷题记录(好久不见又在写代码了!
给定一个整数数组
nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:
输入:nums = [3,2,4], target = 6输出:[1,2]示例 3:
输入:nums = [3,3], target = 6输出:[0,1]提示:
2 <= nums.length <= 104-109 <= nums[i] <= 109-109 <= target <= 109- 只会存在一个有效答案
老实说太久没写代码了....感觉对c++的东西已经完全遗忘了,但失去的记忆一直在袭击我啊!隐隐约约我觉得需要用到Map,用空间换时间。
问题首先是语法吧,已经完全忘记C++里面的一些基础的数据结构了,连unordered_map都打不对了...另外一个需要注意的写在注释里面了
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> indexmap; //好久没写代码了吼吼吼,这里只需要映射关系,所以不需要Order,如果用默认map的话,会是一个自平衡二叉搜索树(通常是红黑树),O(logn),会增大时间开销; 也即indexmap是一个数字——>index的映射表 for(int i = 0; i < nums.size(); i ++){ int j = target - nums[i]; if(indexmap.count(j)){ return {indexmap[j], i}; } indexmap[nums[i]] = i; } return {}; } };