Num1
C++暴力解
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int i,j; for(i=0;i<nums.size()-1;i++) { for(j=i+1;j<nums.size();j++) { if(nums[i]+nums[j]==target) { return {i,j}; } } } return {i,j}; }; };
两遍哈希表
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { map<int,int> a;//建立hash表存放数组元素 vector<int> b(2,-1);//存放结果 for(int i=0;i<nums.size();i++) a.insert(map<int,int>::value_type(nums[i],i)); for(int i=0;i<nums.size();i++) { if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=i)) //判断是否找到目标元素且目标元素不能是本身 { b[0]=i; b[1]=a[target-nums[i]]; break; } } return b; }; };
一遍哈希表
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { map<int,int> a;//提供一对一的hash vector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器b for(int i=0;i<nums.size();i++) { if(a.count(target-nums[i])>0) { b[0]=a[target-nums[i]]; b[1]=i; break; } a[nums[i]]=i;//反过来放入map中,用来获取结果下标 } return b; }; };
leetcode73
关键给imap插值
step1.
两重循环给二维数组赋初值,关键是给容器赋初值。
step2.
再进行两次二重循环遍历,分别对行和列进行覆盖。
分析:
时间复杂度O(n^2)
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
multimap<int,int> imap;
for(int i = 0; i != matrix.size(); ++i) {
for(int j = 0; j != matrix[0].size(); ++j) {
if(matrix[i][j] == 0) {
//imap = {i,j};
imap.insert(make_pair(i,j));
}
}
}
for(auto it = imap.begin(); it != imap.end(); ++it) {
for(int j = 0; j != matrix[0].size(); ++j){
if(matrix[it->first][j]){
matrix[it->first][j] = 0;
}
}
for(int i = 0; i != matrix.size(); ++i) {
if(matrix[i][it->second]){
matrix[i][it->second] = 0;
}
}
}
}
};
leetcode49 字母异位分组
step1.这道题有难度,首先应该想到的是要把异构的字符串装到同一个字符串数组中,又要使这一数组具有同一共性。这里考虑使用C++中的unordered_map,遍历二维数组中的每一个字符串,并把排序后的该字符串作为mp的键,以后每有相同键值的字符串出现时就直接加到mp值(数组)的后面。
step2.
遍历mp,将mp的值加入到二维数组ans中。
附代码:
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs){ unordered_map<string,vector<string>> mp; for(string& str : strs){ string key = str; sort(key.begin(),key.end()); mp[key].emplace_back(str); } vector<vector<string>> ans; for(auto it = mp.begin(); it != mp.end(); ++it) { ans.push_back(it->second); } return ans; } };