一.有效字母异位词
1.题目链接
242. 有效的字母异位词 - 力扣(LeetCode)
2.思路
由于英文字母共有 26 个,我们可以创建一个长度为 26 的整数数组,数组的每个索引位置对应一个英文字母(索引 0 对应字母 'a',索引 1 对应字母 'b',以此类推,直到索引 25 对应字母 'z')。通过遍历两个字符串,对每个字符串中的字母进行计数操作,最后检查数组中每个位置的值是否都为 0,若都为 0,则说明两个字符串是字母异位词
3.代码
3.1我的代码易错点!
字符串数组长度:s.length() 整数数组长度:array.length 整数数组定义:int[] array=new int[26];
class Solution {public boolean isAnagram(String s, String t) {int[]array=new int[26];for(int i=0;i<s.length();i++){array[s.charAt(i)-'a']++;}for(int i=0;i<t.length();i++){array[t.charAt(i)-'a']--;}for(int i=0;i<array.length;i++){if(array[i]!=0){return false;}}return true;}
}
二.两个数组的交集
1.题目链接
349. 两个数组的交集 - 力扣(LeetCode)
2.思路
HashSet
是一个不允许有重复元素的集合,它主要用于存储元素,无法直接记录元素出现的次数.HashSet
不保证元素的插入顺序1.去重--(唯一性)
2.无序性
2.不包含键值对
3.代码
class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer>set1=new HashSet<>();Set<Integer>set2=new HashSet<>();
/遍历数组1for(int num:nums1){set1.add(num);}
/遍历数组2的过程中判断哈希表中是否存在该元素for(int num:nums2){if(set1.contains(num)){set2.add(num);}}
/另外申请一个数组存放setRes中的元素,最后返回数组int[]array=new int[set2.size()];int j=0;for(int num:set2){array[j++]=num;}return array;}
}
三.快乐数
1.题目链接
202. 快乐数 - 力扣(LeetCode)
2.思路
1.避免无限循环
使用
HashSet
存储已出现的数字在计算过程中,可能会出现循环的情况,也就是某些数字会反复出现,导致计算陷入无限循环。例如数字 4,计算过程如下:
4→16→37→58→89→145→42→20→4
可以看到,数字 4 再次出现,形成了循环,无法得到结果 1,所以 4 不是快乐数2.getNextNumber( )方法
1.得到数字的最后一位——>取模运算
%
2.将其平方后累加到总和中,
3.去掉最后一位——>整除运算
/
4.重复这个过程直到数字变为 0。
3.代码
class Solution {public boolean isHappy(int n) {Set<Integer>set=new HashSet<>();while(n!=1&&!set.contains(n)){set.add(n);n=getNextNumber(n);}return n==1;}private int getNextNumber(int n){int total=0;while(n!=0){int temp=n%10;total+=temp*temp;n=n/10;}return total;}
}
四.两数之和
1.题目链接
1. 两数之和 - 力扣(LeetCode)
2.思路
---什么时候使用哈希法?
----当我们需要查询某元素是否出现过,或者某元素是否在集合里的时候,就要第一时间想到哈希法
因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。
2.1我的错误代码!!
map.containsKey(temp)
3.代码
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer>map=new HashMap<>();int[]array=new int[2];for(int i=0;i<nums.length;i++){int temp=target-nums[i];if(map.containsKey(temp)){array[0]=i;array[1]=map.get(temp);}map.put(nums[i],i);}return array;}
}