力扣第一题是“两数之和”,题目描述如下:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解题思路:

这道题可以使用暴力枚举的方法,即遍历数组中的每一个元素,然后再遍历其后面的元素,找到两个元素的和等于目标值即可。

代码如下:

class Solution { public: vector twoSum(vector& nums, int target) { vector res; for (int i = 0; i < nums.size(); i++) { for (int j = i + 1; j < nums.size(); j++) { if (nums[i] + nums[j] == target) { res.push_back(i); res.push_back(j); break; } } } return res; } };

时间复杂度:O(n^2)

如果想要更优秀的时间复杂度,可以使用哈希表来记录已经遍历过的元素和它们的下标,这样在遍历到一个元素时,就可以判断目标值减去该元素的差是否在哈希表中,如果在,则找到了两个元素的和为目标值。

代码如下:

class Solution { public: vector twoSum(vector& nums, int target) { vector res; unordered_map<int, int> hash; for (int i = 0; i < nums.size(); i++) { int diff = target - nums[i]; if (hash.find(diff) != hash.end()) { res.push_back(hash[diff]); res.push_back(i); break; } hash[nums[i]] = i; } return res; } };

时间复杂度:O(n)

其中,unordered_map是哈希表的实现,find()函数用来查找哈希表中是否存在指定的键值,end()函数返回一个迭代器,指向哈希表中最后一个元素的后面。如果find()函数查找的键值不存在,它将返回end()函数返回的迭代器。

力扣第一题怎么做

原文地址: https://www.cveoy.top/t/topic/bSyM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录