242.有效的字母异位词
- 刷题
https://leetcode.cn/problems/valid-anagram/
- 文章讲解
https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html
- 视频讲解
https://www.bilibili.com/video/BV1YG411p7BA/?spm_id_from=333.788&vd_source=af4853e80f89e28094a5fe1e220d9062
-
题解(数组解法):
class Solution {
public boolean isAnagram(String s, String t) {
// 数组解法
int[] hash = new int [26];
for(int i = 0; i < s.length(); i++){
// 均是小写字母
hash[s.charAt(i) - 'a'] ++ ;
}
for(int j = 0; j < t.length(); j++){
hash[t.charAt(j) - 'a'] -- ;
}
for(int k = 0; k < 26; k++){
if(hash[k] != 0){
return false;
}
}
return true;
}
}
349. 两个数组的交集
- 刷题
https://leetcode.cn/problems/intersection-of-two-arrays/description/
- 文章讲解
https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html
- 视频讲解
https://www.bilibili.com/video/BV1ba411S7wu/?vd_source=af4853e80f89e28094a5fe1e220d9062
-
题解(数组解法):
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
// 数组解法
int[] hash = new int[1005];
Set<Integer> set1 = new HashSet<>();
for(int i : nums1){
hash[i] ++;
}
// debug点,注意思路
for(int i : nums2){
if(hash[i] != 0){
set1.add(i);
}
}
int[] result = new int[set1.size()];
int num = 0;
for(int i : set1){
result[num++] = i;
}
return result;
}
}
-
题解(哈希解法):
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
// 哈希解法
Set<Integer> set1 = new HashSet<>();
Set<Integer> commonNumSet = new HashSet<>();
for(int num : nums1){
set1.add(num);
}
for(int num : nums2){
if(set1.contains(num)){
commonNumSet.add(num);
}
}
int[] result = new int[commonNumSet.size()];
int num = 0;
for(int i : commonNumSet){
result[num++] = i;
}
return result;
}
}
202. 快乐数
- 刷题
https://leetcode.cn/problems/happy-number/description/
- 文章讲解
https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html
- 视频讲解
https://www.bilibili.com/video/BV1PG4y1b7LA/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=af4853e80f89e28094a5fe1e220d9062
-
题解(一点也不快乐哈哈哈):
class Solution {
// 快乐数
public int getnext(int n){
int sum = 0;
while(n > 0){
// debug点
int d = n % 10;
sum += d * d;
n /= 10;
}
return sum;
}
public boolean isHappy(int n) {
Set<Integer> set1 = new HashSet<>();
while(n != 1 && !set1.contains(n)){
set1.add(n);
n = getnext(n);
}
return n == 1;
}
}
1. 两数之和
- 刷题
https://leetcode.cn/problems/two-sum/description/
- 视频讲解
https://www.bilibili.com/video/BV1aT41177mK/?spm_id_from=333.788&vd_source=af4853e80f89e28094a5fe1e220d9062
- 文章讲解
https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html
-
题解(Map解法):
class Solution {
public int[] twoSum(int[] nums, int target) {
// Map解法
Map<Integer,Integer> map = new HashMap<>();
int[] result = new int[2];
for(int i = 0;i < nums.length;i++){
if(map.containsKey(target - nums[i])){
result[0] = i;
// debug点,弄清楚key和value分别的意义
result[1] = map.get(target - nums[i]);
}
map.put(nums[i],i);
}
return result;
}
}