vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int,int > map;
for(int i=0;i<nums.size();i++) map[nums[i]]=i;
for(int i=0;i<nums.size();i++) {
if(map[target-nums[i]]!=0&&map[target-nums[i]]!=i) {
res.push_back(i);
res.push_back(map[target-nums[i]]);
return res;
}
}
return res;
}
LeetCode第202题. 快乐数
int get(int xx){
int sum=0;
for(;xx!=0;){
sum+=(xx%10)*(xx%10);
xx=xx/10;
}
return sum;
}
bool isHappy(int xx) {
unordered_map<int,int > map;
map[xx]++;
while(true){
int n;
n=get(xx);
//printf("%d\n",n);
if(n==1) return true;
if(map[n]!=0) return false;
else xx=n;
map[n]++;
}
}
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
int res=0;
unordered_map<int,int> map1,map2;
for(int i=0;i<nums1.size();i++){
for(int j=0;j<nums2.size();j++){
map1[nums1[i]+nums2[j]]++;
}
}
for(int i=0;i<nums3.size();i++){
for(int j=0;j<nums4.size();j++){
map2[nums3[i]+nums4[j]]++;
}
}
for(auto c: map1){
if(map2[0-c.first]!=0){
res+=c.second*map2[0-c.first];
}
}
return res;
}
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char ,int >map1,map2;
for(int i=0;i<ransomNote.size();i++) map1[ransomNote[i]]++;
for(int j=0;j<magazine.size();j++) map2[magazine[j]]++;
for(int i=0;i<ransomNote.size();i++){
if(map2[ransomNote[i]]>0) map2[ransomNote[i]]--;
else return false;
}
return true;
}
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
sort(nums.begin(),nums.end());
if(nums[0]>0) return res;
for(int i=0;i<nums.size();i++){
//-4 -1 -1 0 1 2
if(i>0&&nums[i]==nums[i-1]) continue;
int j=i+1,k=nums.size()-1;
while(j<k){
// printf("i=%d \n",i);
if(nums[i]+nums[j]+nums[k]>0) k--;
else if (nums[i]+nums[j]+nums[k]<0) j++;
else if(nums[i]+nums[j]+nums[k]==0){
vector<int> temp;
temp.push_back(nums[i]); temp.push_back(nums[j]); temp.push_back(nums[k]);
//printf("%d %d %d\n" ,i,j,k);
res.push_back(temp);
while (k > j && nums[k] == nums[k - 1]) k--;
while (k > j && nums[j] == nums[j + 1]) j++;
j++;
k--;
}
}
}
return res;
}
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
if(nums[0]>target&&nums[0]>0) return res;
for(int i=0;i<nums.size();i++){
if(i>0&&nums[i]==nums[i-1]) continue;
for(int j=i+1;j<nums.size();j++){
if(j>i+1&&nums[j]==nums[j-1]) continue;
for(int n=j+1,m=nums.size()-1;n<m;){
if(nums[i]+nums[j]>target-nums[n]-nums[m]) m--;
else if(nums[i]+nums[j]<target-nums[n]-nums[m]) n++;
else {
vector<int> temp;
temp.push_back(nums[i]); temp.push_back(nums[j]);
temp.push_back(nums[n]); temp.push_back(nums[m]);
res.push_back(temp);
while(n<m&&nums[n]==nums[n+1]) n++;
while(n<m&&nums[m]==nums[m-1]) m--;
n++;m--;
}
}
}
}
return res;
}