一、问题描述
给定一个整数数组 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 <=
1
0
4
10^4
104
●-
1
0
9
10^9
109 <= nums[i] <=
1
0
9
10^9
109
●-
1
0
9
10^9
109<= target <=
1
0
9
10^9
109
三、代码
方法一:双重循环(暴力破解)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n=nums.size();//获取数组长度
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)//由于不能是两个相同下标的元素,第二次循环初始下标+1向后寻找
{
if(nums[i]+nums[j]==target)
{
return {i,j};
}
}
}
return {};
}
};
/*在第二次循环中也可以从头遍历寻找,但是相应要加上一个判断条件判断两元素下标不同
for(int j=0;j<n;j++)
{
if(nums[i]+nums[j]==target&&i!=j)
{
return {i,j};
}
}
*/
四、总结
1、此方法为使用二重循环的暴力解决方法,如果直接使用if判断条件的话,循环执行次数为
n
2
n^2
n2,而如果将第二次循环下标直接更替为i+1,循环执行次数为
n
(
n
−
1
)
2
n(n-1)\over2
2n(n−1),因此后者花费时间更少
2、return是以返回值输出,cout是标准输出
时间复杂度 | 空间复杂度 |
---|---|
O( n 2 n^2 n2) | O(1) |