LeetCode1两数之和
简单粗暴直接上代码
#include<iostream>
#include<unordered_map>
#include<vector>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> num;
int n = nums.size();
vector<int> result(2);
for(int i = 0; i < n; i++) {
int k = target - nums[i];
if(num.find(k) != num.end()) {
result[0] = i;
result[1] = num[k];
}
else {
num[nums[i]] = i;
}
}
return result;
}
};
LeetCode202快乐数
决断思路:遇到1就果断返回true,若在哈希表中查找到非1的重复元素则一定发生了循环,直接返回false,否则将新元素入表。
#include<iostream>
#include<unordered_map>
#include<unordered_set>
using namespace std;
//class Solution {
//public:
// int jisuan(int n) {
// int sum = 0;
// while(n > 0) {
// int m = n % 10;
// n = n / 10;
// sum += (m * m);
// }
// return sum;
// }
//
// bool isHappy(int n) {
// int i = 0;
// unordered_map<int,int> maps;
// maps[n] = i;
// i++;
// int m = 0;
// m = jisuan(n);
// while(maps.find(m) == maps.end()) {
// maps[m] = i;
// m = jisuan(m);
// i++;
// }
// if(maps.find(1) != maps.end()) {
// return true;
// }
// else {
// return false;
// }
// }
//};
class Solution {
public:
int getSum(int n) { //计算平方和
int a, sum = 0;
while (n) {
a = n % 10;
sum += a * a;
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> set;
while (1) {
int sum = getSum(n);
if (sum == 1) return true; //如果等于1直接返回TRUE
if (set.find(sum) != set.end()) { //判断是否出现死循环
return false;
} else {
set.insert(sum); //未出现过的就添加进去
}
n = sum;
}
}
};
LeetCode242有效的字母异位词
思路:首先因为有长度限制,两个字符串长度是一样多的,所以不会出现b字符串遍历完但是a字符串统计的字符个数大于0最后判定结果为true的情况,因此可以利用一个大小为26的数组存放每个字符的个数,当字符个数小于0 就直接返回false。
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.length() != t.length()) { //先对长度进行判定
return false;
}
vector<int> table(26, 0); //存放字符信息
for (auto &ch: s) {
table[ch - 'a']++; //初次遍历计数
}
for (auto &ch: t) { //二次遍历减数
table[ch - 'a']--;
if (table[ch - 'a'] < 0) {
return false;
}
}
return true;
}
};
LeetCode349两个数组的交集
#include<iostream>
#include<vector>
#include<unordered_set>
using namespace std;
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set; // 存放结果,之所以用set是为了给结果集去重
unordered_set<int> nums_set(nums1.begin(), nums1.end());
for (int num : nums2) {
// 发现nums2的元素 在nums_set里又出现过
if (nums_set.find(num) != nums_set.end()) {
result_set.insert(num);
}
}
return vector<int>(result_set.begin(), result_set.end());
}
};