Leetcode 刷題Day1(1/2)
兩數(shù)之和
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target? 的那 兩個(gè) 整數(shù),并返回它們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)。
你可以按任意順序返回答案。
①暴力解法(太久沒(méi)敲代碼了。。差點(diǎn)忘記vector咋用了,屑?。?/p>
兩層for循環(huán)套 低內(nèi)存高時(shí)間復(fù)雜度
class?Solution?{
public:
????vector<int>?twoSum(vector<int>&?nums,?int?target)?{
????????int?length=nums.size();
????????int?i,j;
????????for(int?i=1;i<=length;i++){
????????????for(int?j=0;j<i;j++){
????????????????if(nums.at(i)+nums.at(j)==target){
????????????????????vector<int>?v;
????????????????????v.push_back(j);
????????????????????v.push_back(i);
????????????????????return?v;
????????????????}
????????????}
????????}
????????vector<int>?v={j,i};
????????return?;
????}
};

②哈希表
哈希表鍵值對(duì)
Object put(Object key, Object value)
將指定?key?映射到此哈希表中的指定?value。
Object get(Object key)
?返回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則返回?null. 更確切地講,如果此映射包含滿足?(key.equals(k))?的從鍵?k?到值?v?的映射,則此方法返回?v;否則,返回?null。
Object remove(Object key)
從哈希表中移除該鍵及其相應(yīng)的值。
class?Solution?{
public:
????vector<int>?twoSum(vector<int>&?nums,?int?target)?{
????????unordered_map<int,?int>?hashtable;?//用一個(gè)哈希表存放給出數(shù)組的數(shù)據(jù)。
????????for?(int?i?=?0;?i?<?nums.size();?++i)?{
????????????auto?it?=?hashtable.find(target?-?nums[i]);
????????????if?(it?!=?hashtable.end())?{
????????????????return?{it->second,?i};?//如果哈希表中有對(duì)應(yīng)的數(shù)字,則該對(duì)為找到的數(shù)組
????????????}
????????????hashtable[nums[i]]?=?i;//如果哈希表中沒(méi)有想要的數(shù)字,則把該數(shù)字加入哈希表中,留給后面i對(duì)應(yīng)的數(shù)字查找。
????????}
????????return?{};
????}
};
//E.g.
//nums[3,2,4]?target=6
//hashtable中?<int,int>對(duì)應(yīng)<第i個(gè)數(shù)字的值,i>
//i=0?hashtable中沒(méi)有3,將3插入哈希表?hashtable[3]=0?hashtable={<3,0>}
//i=1?hashtable中沒(méi)有2,將2插入哈希表?hashtable[2]=1?hashtable={<3,0>,<2,1>}
//i=2?hashtable中有2,2+4=6,則返回鍵2對(duì)應(yīng)的value值1,最后返回[1,2]
