題目:給定一個整數(shù)數(shù)組 nums 和一個整數(shù)目標(biāo)值 target,請你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個 整數(shù),并返回它們的數(shù)組下標(biāo)。你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,數(shù)組中同一個元素在答案里不能重復(fù)出現(xiàn)。你可以按任意順序返回答案。
題解思路一:直接利用雙for循環(huán)來搞定每一種可能的匹配,就是說把每一個值對應(yīng)的每一種情況都進(jìn)行判斷,最終進(jìn)行target判斷,如果匹配成功,返回兩個角標(biāo)值!這個解法最壞的一種情況就是我們遍歷了所有的數(shù)組元素,直到最后一組才匹配成功,所以時間復(fù)雜度為O(n^2)。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> returnvalue;
for(int i = 0;i<nums.size();i++)
{
for(int j = i+1;j<nums.size();j++)
{
if(nums[i]+nums[j] == target)
{
returnvalue.push_back(i);
returnvalue.push_back(j);
return returnvalue;
}
}
}
return returnvalue;
}
};
題解思路二:我們題解一利用的是加法思想,但是也可以利用減法思想來進(jìn)行考慮,就是說讓target減去當(dāng)前值,能不能得到一個目標(biāo)值,然后判斷目標(biāo)中是否屬于這個原本的數(shù)組,這就是思路,具體的實(shí)現(xiàn)用到了map,有關(guān)map的簡單使用,可以看看我之前的這篇博客:https://blog.csdn.net/qq_42253797/category_9910118.html,這個解法雖然說時間復(fù)雜度降低了,但是空間復(fù)雜度又提高了,因?yàn)橛辛薽ap的額外開銷,所以這也是一種在內(nèi)存占用和cpu執(zhí)行時間中的選擇吧,沒有絕對的哪種好與那種壞,和硬件配置也有關(guān)系,不過目前內(nèi)存一般都不成問題。
具體實(shí)現(xiàn)代碼:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> returnvalue;
map<int,int> temp;//暫存
for(int i = 0;i<nums.size();i++)
{
if(temp.count(target-nums[i])!= 0)//如果當(dāng)前map中匹配中這個key值,那么就會返回一個不為0的數(shù)字
{
returnvalue.push_back(i);
returnvalue.push_back(temp[target-nums[i]]);//取出key對應(yīng)的value 壓入vector
return returnvalue;
}
temp[nums[i]] = i;//它是記錄下當(dāng)前key值的value
}
return returnvalue;
}
};
聯(lián)系客服