【代码随想录算法训练营-第六天】【哈希表】242,349,202,1
2023-12-13 23:23:57
242.有效的字母异位词
第一遍
- 思考
- 比较简单,用数组就能实现了
class Solution {
public boolean isAnagram(String s, String t) {
int[] checkListi = new int[256];
int[] checkListj = new int[256];
for (int i = 0; i < s.length(); i++) {
char checkChar = s.charAt(i);
int i_ascii = checkChar - '0';
checkListi[i_ascii] += 1;
}
for (int j = 0; j < t.length(); j++) {
char checkChar = t.charAt(j);
int j_ascii = checkChar - '0';
checkListj[j_ascii] += 1;
}
return Arrays.equals(checkListi, checkListj);
}
}
349. 两个数组的交集
- 学习set:看到了一篇大佬的文章讲set相关知识的,很厉害。
- 学习set转数组:set如何转换为数组
第一遍
- 思考
- 题目不难,但重点是掌握和了解set相关的知识,包括list、Hashset、treeset
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
for (int i : nums1) {
set1.add(i);
}
for (int i : nums2) {
if (set1.contains(i)) {
set2.add(i);
}
}
return set2.stream().mapToInt(Integer::intValue).toArray();
}
}
202. 快乐数
第一遍
- 思考
- 题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!(这一步如果能想出来,才是真的理解题目的,但是我好像是误打误撞了,只是惯性思维觉得应该用set判断是否有重复出现,没有真正读懂题意)
- 题目的重点还是看到是否有出现过,要学会使用set
- 难点:如何取出每一位的数值;这一步想了一下,没有过多思考,答案应该有很简单的方法,就直接看了,自己想了5mins没有很好的办法;
class Solution {
public boolean isHappy(int n) {
Set<Integer> set1 = new HashSet<>();
boolean flag = true;
while (flag) {
n = sum(n);
if (n == 1) {
return flag;
}
flag = set1.add(n);
}
return flag;
}
public int sum(int n) {
int result = 0;
while (n > 0) {
int mod = n % 10;
result += mod * mod;
n /= 10;
}
return result;
}
}
1. 两数之和
第一遍
- 思考
- 根据建议,先看了题解,了解到了本题应该使用的思路,了解了一下java相关的map的用法,一遍AC了。
- 下面两张图片我感觉是我理解题目的中重点,大家可以好好品一品
package HashStructure;
import java.util.*;
public class HashTest {
public static void main(String[] args) {
int[] nums1 = {2,7,11,15};
int target = 9;
Solution solution = new Solution();
int[] result = solution.twoSum(nums1, target);
System.out.println(Arrays.toString(result));
}
}
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map1 = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int findValue = target - nums[i];
if (map1.containsKey(findValue)) {
return new int[]{i, map1.get(findValue)};
} else {
map1.put(nums[i], i);
}
}
return new int[]{};
}
}
文章来源:https://blog.csdn.net/qq_40691970/article/details/134911167
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!