给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
这题太基本了,先来写暴力搜索两个for循环来实现:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int>res;//用这个vector存储最终返回的两个下标 ,数组为size型,string为string::sizetype,vector为size
for (int i = 0; i < nums.size(); i++)
{
for (int j = i + 1; i < nums.size(); j++)//这里是关联的嵌套for如果用不关联的会重复搜索
{
if (nums[i] + nums[j] == target)
res[0] = i;
res[1] = j;
return res;
}
}
return res;
}
};
哈希表::stl里自带的map
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> map1;
for(int i=0;i<nums.size();++i){
int j=target-nums[i];
if(map1.find(j)!=map1.end()){
return vector<int> {map1.find(j)->second,i};
}else{
map1[nums[i]]=i;
}
}
return nums;
}
};
二分查找这里先来个坑,后面更新:
int erfeng(int left, int right, int target)
{
if (left < right)
return -1;
int mid = (left + right) / 2;
if (target < mid)
{
return erfeng(left + 1, mid, target);
}
else
return erfeng(mid, right - 1, target);
}
在博客编辑的,没有编译器,可能会出错,等填坑的时候来修改