一、242.有效的字母异位词
题目链接:https://leetcode.cn/problems/valid-anagram/description/
文章讲解: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
1.1 初见思路
1.使用数组来实现,char-'a’的值作为下标,遍历第一个字符串出现就+1,遍历第二个字符串,出现的下标对应值-1
2.遍历完后,遍历一遍数组,看是否都为0,只要有一个不为0,则返回false
1.2 具体实现
class Solution {
public boolean isAnagram(String s, String t) {
int[] arr = new int[26];
char[] sArr = s.toCharArray();
char[] tArr = t.toCharArray();
for(int i=0;i<sArr.length;i++){
arr[sArr[i]-'a'] += 1;
}
for(int i=0;i<tArr.length;i++){
arr[tArr[i]-'a'] -= 1;
}
for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
return false;
}
}
return true;
}
}
1.3 重难点
找对思路,这题就好做。
二、 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#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频讲解:https://www.bilibili.com/video/BV1ba411S7wu
2.1 初见思路
2.2 具体实现
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set = new HashSet<>();
HashSet<Integer> resultSet = new HashSet<>();
for (int i : nums1) {
set.add(i);
}
for(int i:nums2){
if(set.contains(i)){
resultSet.add(i);
}
}
int[] res = new int[resultSet.size()];
int k =0;
for (Integer i : resultSet) {
res[k++]=i;
}
return res;
}
}
2.3 重难点
三、 202. 快乐数
题目链接:https://leetcode.cn/problems/happy-number/description/
文章讲解:https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html#%E6%80%9D%E8%B7%AF
视频讲解:
3.1 初见思路
1.乍看没啥规律,但是将示例2进行模拟就会发现,这个题就是在sum的值为1之前,判断sum的集合中是否出现重复元素。
3.2 具体实现
class Solution {
public boolean isHappy(int n) {
HashSet set = new HashSet<Integer>();
while(n!=1 && !set.contains(n)){
set.add(n);
n=getSum(n);
}
return n==1;
}
public int getSum(int n){
int sum=0;
while(n!=0){
int temp = n%10;
sum+=temp*temp;
n=n/10;
}
return sum;
}
}
3.3 重难点
- while循环条件要掌握
四、 1. 两数之和
题目链接:https://leetcode.cn/problems/two-sum/description/
文章讲解:https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html#%E6%80%9D%E8%B7%AF
视频讲解:
4.1 初见思路
4.2 具体实现
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(!map.containsKey(target-nums[i])){
map.put(nums[i],i);
}
else{
res[0]=i;
res[1]=map.get(target-nums[i]);
return res;
}
}
return res;
}
}
4.3 重难点
- 简单题想一次过也不容易
- 要想清楚map的key和value都存的什么值
- 判断条件是什么以及结果从哪里取