目录
242. 有效的字母异位词
349. 两个数组的交集
202. 快乐数
1. 两数之和
242. 有效的字母异位词
242. 有效的字母异位词
难度:easy
类型:哈希表
思路:
代码:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int len = s.length();
int[] hash = new int[26];
for (int i = 0; i < len; i++) {
hash[s.charAt(i) - 'a']++;
hash[t.charAt(i) - 'a']--;
}
for (int j: hash) {
if (j != 0) {
return false;
}
}
return true;
}
}
复杂度分析:
- 时间复杂度: O(n)
- 空间复杂度: O(1)
349. 两个数组的交集
349. 两个数组的交集
难度:easy
类型:哈希表
思路:
代码:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {
return new int[0];
}
Set<Integer> set1 = new HashSet<>();
for (int i: nums1) {
set1.add(i);
}
Set<Integer> set2 = new HashSet<>();
for(int i: nums2) {
// set1中包含的元素才添加到set2
if (set1.contains(i)) {
set2.add(i);
}
}
// set转数组
int[] ans = new int[set2.size()];
int j = 0;
for (int i: set2) {
ans[j++] = i;
}
return ans;
}
}
202. 快乐数
202. 快乐数
难度:easy
类型:哈希表
思路:
代码:
class Solution {
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<>();
while (!set.contains(n)) {
// 各位平方和中出现1,则为快乐数
if (n == 1) {
return true;
}
set.add(n);
n = nextNum(n);
}
// 若set中元素重复出现,则不是快乐数
return false;
}
public int nextNum(int n) {
int num = 0;
while(n != 0) {
num += Math.pow(n % 10, 2);
n /= 10;
}
return num;
}
}
1. 两数之和
1. 两数之和
难度:easy
类型:哈希表
思路:
代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] ans = new int[2];
if (nums == null || nums.length < 2) {
return ans;
}
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++) {
int gap = target - nums[i];
if (map.containsKey(gap)) {
ans[0] = i;
ans[1] = map.get(gap);
return ans;
} else {
map.put(nums[i], i);
}
}
return ans;
}
}