LeetCode算法题:
题目描述(中文):
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
English:
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
思路:此题如果用哈希表的话应该时间复杂度为O(N),空间复杂度为O(N),但我还并不会哈希表,所以我就直接遍历,官方叫暴力枚举,时间复杂度为O(N2),空间复杂度为O(1)(没有使用辅助空间),学会哈希表之后我会回来再做一遍。
由于刚学vector容器不久,在将数据放入vector容器中时我使用了cin>>,这是不能将数据成功放入vector容器中的,应该push_back,或者使用迭代器。
#include <iostream>
#include <vector>
using namespace std;
/** \brief TwoSum
*@NWNU ziyif
*/
class Solution{
public:
vector<int> TwoSum(vector<int>&nums,int target){
vector<int> a;
for(int i=0; i<nums.size(); i++){
int temp=target-nums[i];
for(int j=i+1; j<nums.size(); j++){
if(temp==nums[j]){
a.push_back(i);
a.push_back(j);
}
}
}
return a;
}
};
int main()
{
vector<int> nums;
vector<int> a;
Solution s;
int target;
int n;
cout<<"输入数组长度:";
cin>>n;
cout<<"输入数组:";
for(int i=0; i<n; i++){
int x;
cin>>x;
nums.push_back(x);
//cin>>nums[i];该方式不可以将数据放入vector容器中
}
cout<<"输入target:";
cin>>target;
a=s.TwoSum(nums,target);
//输出方式一
/*for(int i=0; i<a.size(); i++){
cout<<a[i]<<" ";
}*/
//输出方式二
for(vector<int>::iterator it=a.begin();it!=a.end();it++){
cout<<*it<<" ";
}
return 0;
}