242.有效的字母异位词。
这题比较简单。
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.length()!=t.length())
{
return false;
}
map<char,int> map1;
map<char,int> map2;
for(int i =0;i<s.length();i++)
{
map1[s[i]]++;
map2[t[i]]++;
}
for(int i=0;i<s.length();i++)
{
if(map1[s[i]] != map2[s[i]])
{
return false;
}
}
return true;
}
};
349. 两个数组的交集
这题我用了map,set也行。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
map<int,int> map;
vector<int> num;
for(int i=0;i<nums1.size();i++)
{
auto it = find(nums2.begin(),nums2.end(),nums1[i]);
if(it != nums2.end())
{
map[nums1[i]]++;
}
}
for(auto a : map)
{
num.push_back(a.first);
}
return num;
}
};
202. 快乐数
重点是跳出循环。。。。。
class Solution {
public:
int get(int n)
{
int sum=0;
while(n)
{
sum += (n%10)*(n%10);
n = n/10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> uset;
while(true)
{
int sum = get(n);
if( sum ==1)
{
return true;
}
auto it = find(uset.begin(),uset.end(),sum);
if( it != uset.end())
{
return false;
}
else{
uset.insert(sum);
}
n = sum;
}
}
};
1. 两数之和
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> map;
for(int i =0;i<nums.size();i++)
{
auto it = map.find(target-nums[i]);
if(it !=map.end())
{
return {it->second,i};
}
map[nums[i]] =i;
}
return {};
}
};
454.四数相加II
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
map<int,int> map1;
for(int i=0;i<nums1.size();i++)
{
for(int j=0;j<nums2.size();j++)
{
map1[nums1[i] + nums2[j]]++;
}
}
int count =0;
for(int i=0;i<nums3.size();i++)
{
for(int j=0;j<nums4.size();j++)
{
if(map1.find(0-nums3[i]-nums4[j]) != map1.end())
{
count += map1[0-nums3[i]-nums4[j]];
}
}
}
return count;
}
};
383. 赎金信
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
map<char,int> map;
for(char c: magazine)
{
map[c]++;
}
for(char m:ransomNote)
{
if(map[m]!=0)
{
map[m]--;
}
else{
return false;
}
}
return true;
}
};
15. 三数之和
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> result;
for(int i=0;i<nums.size();i++)
{
if(nums[i]>0)
{
return result;
}
if(i>0 && nums[i]==nums[i-1])
{
continue;
}
int left =i+1;
int right = nums.size()-1;
while(left<right)
{
if(nums[i]+nums[left]+nums[right] == 0)
{
result.push_back(vector<int>{nums[i],nums[left],nums[right]});
while (right > left && nums[right] == nums[right - 1]) right--;
while (right > left && nums[left] == nums[left + 1]) left++;
right--;
left++;
}
else if(nums[i]+nums[left]+nums[right] > 0)
{
right--;
}
else{
left++;
}
}
}
return result;
}
};
18. 四数之和
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
vector<vector<int>> result;
for(int i=0;i<nums.size();i++)
{
if(nums[i]> target && nums[i]>0)
{
break;
}
if(i>0 && nums[i]==nums[i-1])
{
continue;
}
for(int j=i+1;j<nums.size();j++)
{
if(nums[i]+nums[j]> target && nums[i]+nums[j]>=0)
{
break;
}
if(j > i+1 && nums[j]==nums[j-1])
{
continue;
}
int left =j+1;
int right =nums.size()-1;
while(right > left)
{
if((long)nums[i]+nums[j]+nums[left]+ nums[right] > target)
{
right--;
}
else if((long)nums[i]+nums[j]+nums[left]+ nums[right] < target)
{
left++;
}
else{
result.push_back(vector<int>{nums[i], nums[j], nums[left],nums[right]});
while (right > left && nums[right] == nums[right - 1]) right--;
while (right > left && nums[left] == nums[left + 1]) left++;
right--;
left++;
}
}
}
}
return result;
}
};
累了。。。