链接力扣242-有效的字母异位词
思路:
1、把其中一个串的字符映射到数组也就是哈希表的索引下标
2、将某字母在串中出现的次数当作value值
3、最后,验证value值是否全为0
class Solution {
public boolean isAnagram(String s, String t) {
// 定义一个以26个字母的ASC||值为key的数组
int[] record = new int[26];
// 让s里的每一个字母为key,其出现次数为value,形成一个字典
for(int i = 0; i < s.length(); i++){
// 如果是字母a,则record[0]++,以此类推
record[s.charAt(i) - 'a']++;
}
// 对s做好的字典,让t进行减操作,一但出现value非0,则说明出现次数有不同
for(int i = 0; i < t.length(); i++){
record[t.charAt(i) - 'a']--;
}
for(int i = 0; i < record.length; i++){
if(record[i] != 0) return false;
}
return true;
}
}
链接力扣343-两个数组的交集
思路:
1、根据题意,需要是交集数字,并且不能重复(重复两也算一个),其它重复的也要算
2、先将其中一个数组放入set中,再检验另一个数组是否包含,若同样包含的,放入另一个set中
3、最后将结果set转为数组,并返回
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> nums1set = new HashSet<>();
Set<Integer> resset = new HashSet<>();
for(int num1:nums1){
nums1set.add(num1);
}
for(int num2:nums2){
if(nums1set.contains(num2)){
resset.add(num2);
}
}
// 最后要转化为数组,数组一要有索引,二要有值
// int j = 0;
// int[] res = new int[resset.size()];
// for(int num:resset){
// res[j++] = num;
// }
// return res;
return resset.stream().mapToInt(x -> x).toArray();
}
}
链接力扣202-快乐数
思路:
1、此题重点:如果不到1,则会无限循环,只要判断n在不断求和过程中,这个sum会不会重复出现即可
2、从第一个数开始,直到1,中间得到的每一个sum都放入set中,一但有重复的,说明这个数不是快乐数
3、while循环条件:sum不为1且set中不包含sum,一旦跳出循环,说明不满足上述两条件,true或者false
class Solution {
public boolean isHappy(int n) {
// 此题重点:如果不到1,则会无限循环,只要判断这个sum会不会重复出现即可
Set<Integer> record = new HashSet<>();
// 从第一个数开始,直到1,中间得到的每一个数都放入set中,一但有重复的,说明这个数不是快乐数
int tmp = n;
// 循环条件为:tmp不为1且set中不包含tmp
// 一旦跳出循环,说明不满足上述两条件,true或者false
while(tmp != 1 && !record.contains(tmp)){
record.add(tmp);
tmp = getSum(tmp);
}
return tmp==1;
}
public int getSum(int n){
int res = 0;
while(n > 0){
int tmp = n % 10; //取余得到末位数
res += tmp * tmp;
n = n / 10;
}
return res;
}
}
链接力扣1-两数之和
思路:
1、需要用hashmap,key为nums数组的值,value是索引,因为最后结果是索引
2、在一个for循环需要处理两个事,一是如果map包含target-nums[i],则直接返回这两个数的索引,也就是map的值
二是如果不包含,则需要将当前数字放入map中
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
// int[] res = new int[2];
for(int i = 0; i < nums.length; i++){
if(map.containsKey(target-nums[i])){
return new int[]{map.get(target-nums[i]),i};
}else{
map.put(nums[i],i);
}
}
return new int[2];
}
}
文章介绍了使用哈希表解决LeetCode中的四道题目:检查字母异位词的有效性,找到两个数组的交集,判断快乐数以及寻找两数之和。每种方法都利用了哈希数据结构,如数组和Set,来优化解决方案,确保复杂度降低并避免重复计算。
659

被折叠的 条评论
为什么被折叠?



