文档讲解:242.有效的字母异位词、349. 两个数组的交集、202. 快乐数 、1. 两数之和
题目链接:242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
视频讲解:242.有效的字母异位词_哔哩哔哩_bilibili、349. 两个数组的交集_哔哩哔哩_bilibili、1. 两数之和_哔哩哔哩_bilibili
思路:
1、第一题主要是熟悉对hashmap的应用,将s的所有字母都放入hashmap,再将t的每个字母一个一个减去,若没有匹配到,则返回false,全部匹配到了,返回true。
2、第二题主要熟悉hashset,将第一个数组的数据放入set,第二个数组能匹配上就删除,最后将得到的数据放入新的数组。
3、第三题的一个难点是理解题意,每一位上的数的平方相加后,若为1,则是快乐数,若不为1,就添加进set,每次计算之前先判断是否该数在set中,若在set中,则进入了循环,就返回false。
4、两数之和,力扣的第一题,虽然是第一题但是还是需要思考思考如何做。暴力当然就可以直接解出来,但是小于O(n 2 ^2 2)的算法是需要用到HashMap来存储数据的。遍历一遍,如果遍历到的数据在map中不存在9减去该值的数据,则将该数据和其下标存在map中,若存在,则返回这两个的下标。
242.有效的字母异位词
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()){
return false;
}
if(s.length() == 0 && t.length() == 0){
return true;
}
HashMap<Character, Integer> map = new HashMap();
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
map.replace(s.charAt(i),map.get(s.charAt(i))+1);
}else{
map.put(s.charAt(i),1);
}
}
for(int i=0;i<t.length();i++){
if(map.containsKey(t.charAt(i))){
int num = map.get(t.charAt(i))-1;
if(num == 0){
map.remove(t.charAt(i));
}else{
map.replace(t.charAt(i), num);
}
}else{
return false;
}
}
return true;
}
}
349. 两个数组的交集
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashSet set = new HashSet();
int[] res = new int[nums1.length];
int num = 0;
for(int i=0;i<nums1.length;i++){
set.add(nums1[i]);
}
for(int i=0;i<nums2.length;i++){
if(set.contains(nums2[i])){
set.remove(nums2[i]);
res[num++] = nums2[i];
}
}
int[] res1 = new int[num];
for(int i=0;i<num;i++){
res1[i] = res[i];
}
return res1;
}
}
202. 快乐数
class Solution {
public boolean isHappy(int n) {
HashSet set = new HashSet();
while(n!=1){
if(set.contains(n)){
return false;
}
set.add(n);
n = pingfang(n);
}
return true;
}
public int pingfang(int n){
int sum = 0;
while(n!=0){
int a = n%10;
sum += a*a;
n = n/10;
}
return sum;
}
}
1. 两数之和
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map = new HashMap<>();
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[0];
}
}