1.兩數之和
暴力:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();vector<int> res(2, -1); // 初始化結果為-1for (int i = 0; i < n; i++) {int temp = nums[i];for (int j = i + 1; j < n; j++) {if (target == temp + nums[j]) {res[0] = i ; // 索引加1以符合一般的約定res[1] = j ;return res; // 找到結果后立即返回}}}// 如果找不到結果,返回空向量return res;}
};
hash表:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> hashtable;vector<int> res(2,-1);for(int i=0;i<nums.size();i++){if(hashtable.count(target-nums[i])>0)//哈希表中存在元素與之和為目標值{res[0]=i;res[1]=hashtable[target-nums[i]]; break;}else{hashtable[nums[i]]=i;//沒有就把該元素存到哈希表中}}return res;}
};
2.字母異位詞分組
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>> mp;//定義一個無序表for(string&str:strs){//定義了一個函數,類型為string,名稱為strsstring key=str; //記錄排序后的字符串sort(key.begin(),key.end());//對字符串內部元素進行排序并把排序得到的結果賦給keymp[key].emplace_back(str); //將str添加到key所在行的最后}vector<vector<string>> ans;for(auto i=mp.begin();i!=mp.end();i++){ans.emplace_back(i->second);//eg:nat被排序為ant,存到mp里邊形式是ant,tan,nat;把tan,nat以[tan,nat]形式加入到ans中}return ans;}
};
3.有效的字母異位詞
class Solution {
public:bool isAnagram(string s, string t) {if (s == t) return false;if (s.size() != t.size()) {return false;}else {string temp1 = s;string temp2 = t;sort(temp1.begin(), temp1.end());sort(temp2.begin(), temp2.end());if (temp1 != temp2) {return false;}else {return true;}}}
};