hash table easy

来源:互联网 发布:如何打造网络爆款微信 编辑:程序博客网 时间:2024/05/16 17:21

Hash table (easy)

1.         Two Sum

class Solution {

public:

   vector<int>twoSum(vector<int>& nums, int target)

      {

             vector<int> vec;

             map<int,int> index;

             for(int i=0;i<nums.size();i++)

             {

                if(index.find(target-nums[i])!=index.end())

                {

                     vec.push_back(index[target-nums[i]]);

                     vec.push_back(i);

                     break;

                }

                index[nums[i]]=i;

             }

             return vec;

      }

};

202. Happy Number

class Solution {

public:

   bool isHappy(int n)

   {

       set<int> visited;

       while(n!=1)

       {

           if(visited.find(n)!=visited.end())

               return false;             //如果能在set里找到这个数,说明出现循环

           visited.insert(n);

           int sum=0;

           while(n)

           {

               sum+=(n%10)*(n%10);

               n/=10;

           }

           n=sum;

       }

       return true;

   }

};

204. Count Primes

此方法超时

class Solution {

public:

   int countPrimes(int n)

  /* {

       int count=0;

       for(int i=2;i<n;i++)

       {

           if(isprime(i))

               count++;

       }

       return count;

   }

   bool isprime(int n)

   {

       if(n==1)

           return false;

       for(int i=2;i*i<=n;i++)

       {

           if(n%i==0)

           return false;

       }

       return true;

       

   }

*/

 

 

厄拉多塞筛法

   {

       bool *del=new bool[n];  // 标记是否被划去

       del[2]=false;   

       for(int i=3;i<n;i++)

       {

           if(i%2==0)

               del[i]=true;   // 2的倍数全部划去

           else

               del[i]=false;

       }

       for(int i=3;i<n;i+=2)

       {

           if(!del[i]) // 之后第一个未被划去

           {

               if(i*i>n) break;   // 当前素数的平方大于n,跳出循环

               for(int j=2;i*j<n;j++)

                   del[i*j]=true;

           }

       }

       int count =0;

       for(int i=2;i<n;i++)

       {

           if(!del[i])

           count++;

       }

       delete[] del;

       return count;

           

   }

};

205. Isomorphic Strings

class Solution {

public:

   /*string transferstr(string s)

   {

       char table[128]={0};

       char temp='0';

       for(int i=0;i<s.length();i++)

       {

           char c=s.at(i);    //s.at(n)表示返回下标为n的字符

           if(table[c]==0)

           {

               table[c]=temp;

               temp++;

           }

           s[i]=table[c];

       }

       return s;

   }*/

   string transferstr(string s)

   {

       map<char,int> s2i;

       for(int i=0;i<s.length();i++)

       {

           if(s2i.find(s[i])==s2i.end())

           {

               s2i[s[i]]=s2i.size();

               s[i]=s2i[s[i]];

           }

           else

               s[i]=s2i[s[i]];

       }

       return s;

   }

 

   bool isIsomorphic(string s, string t)

   /*{

       if(s.length()!=t.length())

           return false;

       if(transferstr(s)==transferstr(t))

           return true;

       return false;

   }*/

   {

       return transferstr(s)==transferstr(t);

   }

};

217. Contains Duplicate

class Solution {

public:

   bool containsDuplicate(vector<int>&nums)

   /*{

       map<int,int>index;

       for(int i=0;i<nums.size();i++)

       {

           if(index.count(nums[i]))

               return true;

           index[nums[i]]=1;

       }

       return false;

   }*/

   /*{

       set<int>s(nums.begin(),nums.end());

       if(s.size()!=nums.size())

       return true;

       else

       return false;

   }*/

   {

       sort(nums.begin(),nums.end());

       if(unique(nums.begin(),nums.end())!=nums.end())

       return true;

       else

       return false;

       

   }

};

 

 

 

class Solution {

public:

   boolcontainsDuplicate(vector<int>& nums)

   {

       map<int,int> index;

       for(int i=0;i<nums.size();i++)

       {

           index[nums[i]]++;

       }

       map<int,int>::iteratorit=index.begin();

       for(;it!=index.end();it++)

       {

           if(it->second>=2)

               return true;

       }

       return false;

   }

};

219. Contains Duplicate II

class Solution {

public:

   boolcontainsNearbyDuplicate(vector<int>& nums, int k)

   {

       map<int,int> index

       for(int i=0;i<nums.size();i++)

       {

           if(index.find(nums[i])!=index.end()&&(i-index[nums[i]])<=k)

           {

                  return true;

           }

           index[nums[i]]=i;

 

       }

       return false;

   }

};

242. Valid Anagram

class Solution {

public:

   bool isAnagram(string s, string t)

   {

       if(s.size()!=t.size())

       return false;

       int hash[26]={0};

       for(int i=0;i<s.size();i++)

           ++hash[s[i]-'a'];

       for(int i=0;i<t.size();i++) 

       {

           if(hash[t[i]-'a']==0)

           return false;

           --hash[t[i]-'a'];

       }

       return true;

       

   }

};

 

class Solution {

public:

   bool isAnagram(string s, string t)

   {

       if(t.size()!=s.size())

       return false;

       map<char,int> index;

       for(int i=0;i<s.size();i++)

       {

           index[s[i]]++;

       }

       for(int i=0;i<t.size();i++)

       {

           if(index[t[i]]==0)

           return false;

           index[t[i]]--;

       }

       return true;

   }

};

290. Word Pattern

class Solution {

public:

   

   bool wordPattern(string pattern, stringstr)

   {

       map<char,int> p2i;

       for(int i=0;i<pattern.length();i++)

       {

           if(p2i.find(pattern[i])==p2i.end())

           {

                p2i[pattern[i]]=p2i.size();           

                pattern[i]=p2i[pattern[i]];               

           }

           else

                pattern[i]= p2i[pattern[i]];

       }

  map<string,int>s2i;

istringstream ss(str);  //空格、回车、换行都是默认的分界符

       string word;

       string str_res;

       while(ss>>word)

       {

           

           if(s2i.find(word)==s2i.end())

           {

                s2i[word]=s2i.size();

                str_res+= s2i[word];

           }

           else

                str_res+= s2i[word];

       }

       return pattern==str_res;

   }

};

349. Intersection of Two Arrays

class Solution {

public:

   vector<int>intersection(vector<int>& nums1, vector<int>& nums2)

   {

       set<int> num;

       vector<int> res;

       for(int i=0;i<nums1.size();i++)

           num.insert(nums1[i]);

       for(int i=0;i<nums2.size();i++)

       {

           if(num.find(nums2[i])!=num.end())

           {

              num.erase(nums2[i]);

              res.push_back(nums2[i]);

           }

       }

       return res;

   }

};

 

class Solution {

public:

   vector<int>intersection(vector<int>& nums1, vector<int>& nums2)

   {

       map<int,int> index;

       set<int> res;

       for(int i=0;i<nums1.size();i++)

           index[nums1[i]]++;

       for(int i=0;i<nums2.size();i++)

       {

           if(index.find(nums2[i])!=index.end())

              res.insert(nums2[i]);

       }

       returnvector<int>(res.begin(),res.end());

   }

};

350. Intersection of Two Arrays II

class Solution {

public:

   vector<int>intersect(vector<int>& nums1, vector<int>& nums2)

   {

       map<int,int> index;

       vector<int> res;

       for(int i=0;i<nums1.size();i++)

           index[nums1[i]]++;

       for(int i=0;i<nums2.size();i++)

       if(index[nums2[i]]>0)

       {

           res.push_back(nums2[i]);

           index[nums2[i]]--;

       }

       return res;

   }

};

389. Find the Difference

class Solution {

public:

   char findTheDifference(string s, string t)

   {

       map<char,int> s2i;

       for(int i=0;i<s.length();i++)

           s2i[s[i]]++;

       for(int i=0;i<t.length();i++)

       {

           if(s2i[t[i]]!=0)

                s2i[t[i]]--;

           else

               return t[i];

       }

   }

};

 

 

class Solution {

public:

   char findTheDifference(string s, string t)

   {

       map<char,int> index;

       for(int i=0;i<t.size();i++)

       {

           index[t[i]]++;

       }

       for(int i=0;i<s.size();i++)

       {

           if(index[s[i]]>0)

               index[s[i]]--;

       }

       map<char,int>::iteratorit=index.begin();

       for(;it!=index.end();it++)

       {

           if(it->second>0)

               return it->first;

       }

 

   }

};

409. Longest Palindrome

class Solution {

public:

   int longestPalindrome(string s)

   {

       map<char,int> index;

       vector<char> result;

       for(int i=0;i<s.length();i++)

       {

           index[s[i]]++;

       }

       int c = 0;

       int count = 0;

       

       for(map<char, int>::iteratoriter= index.begin(); iter != index.end(); iter++)

       {

           if(iter->second%2==0) count +=iter->second;

           else

           {

               count += iter->second -1;

               c = 1;

           }

       }

       return count+c;

   }

};

438. Find All Anagrams in a String

class Solution {

public:

   vector<int> findAnagrams(string s,string p)

   {

       map<char,int> mp;

       vector<int> res;

       for(int i=0;i<p.size();i++)

       {

           mp[p[i]]++;

       }

       int i=0,j=0;

       for(;i<s.size();)

       {

           for(;j-i<p.size()&&mp.count(s[j])&&mp[s[j]]>0;j++)

               mp[s[j]]--;

           if(j-i==p.size())

               res.push_back(i);

           if(j==i)

               j++;

           else

               mp[s[i]]++;

           i++;

       }

       return res;

   }

};

447. Number of Boomerangs

class Solution {

public:

   intnumberOfBoomerangs(vector<pair<int, int>>& points)

   {

       int res=0;

       

       for(int i=0;i<points.size();i++)

       {

           map<int,int> index;

           for(int j=0;j<points.size();j++)

           {

               intdx=points[i].first-points[j].first;

               intdy=points[i].second-points[j].second;

               index[dx*dx+dy*dy]++;

           }

 

       for(map<int,int>::iteratorit=index.begin();it!=index.end();it++)

           res+=(it->second)*(it->second-1);

       }

 

       return res;

   }

};

463. Island Perimeter

class Solution {

public:

   intislandPerimeter(vector<vector<int>>& grid)

   {

       int sum=0;

       

       int m=grid.size();

       int n=grid[0].size();

       

       for(int i=0;i<m;i++)

       {

           for(int j=0;j<n;j++)

           {

               if(grid[i][j])

               {

                   if(i==0||grid[i-1][j]==0)sum++;

                   if(i==m-1||grid[i+1][j]==0)sum++;

                   if(j==0||grid[i][j-1]==0)sum++;

                   if(j==n-1||grid[i][j+1]==0)sum++;

               }

           }

       }

       return sum;

   }

};

500. Keyboard Row

class Solution {

public:

   vector<string>findWords(vector<string>& words)

   {

       set<char>row1={'q','Q','w','W','e','E','r','R','t','T','y','Y','u','U','i','I','o','O','p','P'};

       set<char>row2={'a','A','s','S','d','D','f','F','g','G','h','H','j','J','k','K','l','L'};

       set<char>row3={'z','Z','x','X','c','C','v','V','b','B','n','N','m','M'};

       vector<string> res;

       for(int i=0;i<words.size();i++)

       {

           bool f1=true,f2=true,f3=true;

           for(char ch:words[i])

           {

               if(f1)

               {

                   auto it=row1.find(ch);

                   if(it==row1.end())

                       f1=false;

               }

              if(f2)

               {

                   auto it=row2.find(ch);

                   if(it==row2.end())

                       f2=false;

               }

              if(f3)

               {

                   auto it=row3.find(ch);

                   if(it==row3.end())

                       f3=false;

               }

           }

           if(f1||f2||f3)

               res.push_back(words[i]);

       }

       return res;

       

   }

};

0 0