給定一個整數數組 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);
}
在博客編輯的,沒有編譯器,可能會出錯,等填坑的時候來修改