242.有效的字母异位词
题目链接:https://leetcode.cn/problems/valid-anagram/description/
解题思路
将两个字符串转为字符数组,用一个HashMap来存储一个字符串中字符的情况,key为字符,value为字符正第一个字符串中出现的次数。再遍历第二个字符数组,每次判断该字符是否在第一个字符串中出现,如果有出现,则将map中出现次数减一,如果没有出现,则返回false.
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] chars_s = s.toCharArray();
char[] chars_t = t.toCharArray();
Map<Character, Integer> sCharNumMap = new HashMap<>();
for (char c : chars_s) {
int num = sCharNumMap.getOrDefault(c, 0);
sCharNumMap.put(c, num + 1);
}
for (char c : chars_t) {
int num = sCharNumMap.getOrDefault(c, 0);
if (num == 0) {
return false;
}
sCharNumMap.put(c, num - 1);
}
return true;
}
}
349. 两个数组的交集
题目链接:https://leetcode.cn/problems/intersection-of-two-arrays/description/
解题思路
使用set,sameSet分别存储第一个数组和交集,遍历nums1,将数据存入set中。再遍历nums2,判断set中是否有相同的数据,如果后,则存入sameSet中。最后返回sameSet中的数据
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set = new HashSet<>();
Set<Integer> sameSet = new HashSet<>();
for (int num: nums1) {
set.add(num);
}
for (int num: nums2) {
if (set.contains(num)) {
sameSet.add(num);
}
}
int[] res = new int[sameSet.size()];
int i = 0;
for (int num: sameSet) {
res[i++] = num;
}
return res;
}
}
202. 快乐数
题目链接:https://leetcode.cn/problems/happy-number/description/
解题思路
使用numSet来存储每个位置上的数字的平方和,当某个平方和等于1时,则返回true,或者当某个平方和在numSet中存在则返回false。
class Solution {
public boolean isHappy(int n) {
Set<Integer> numSet = new HashSet<>();
while(!numSet.contains(n)) {
if (n == 1) {
return true;
}
numSet.add(n);
n = sumOfSquares(n);
}
return false;
}
public int sumOfSquares(int num) {
int sum = 0;
while(num > 0) {
int remainder = num % 10;
sum += remainder * remainder;
num = num / 10;
}
return sum;
}
}
1. 两数之和
题目链接:https://leetcode.cn/problems/two-sum/description/
解题思路
使用indexMap来存储nums数组的信息,key是值,value是数组的下标index。遍历nums数组,判断target - nums[i] 是否在map中存在,如果存在,则返回两个数的下标,如果不存在,则将信息存入map中。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> indexMap = new HashMap<>();
int[] rtn = new int[2];
for (int i=0; i<nums.length; ++i) {
Integer diffIndex = indexMap.get(target - nums[i]);
if (diffIndex != null) {
rtn[0] = diffIndex;
rtn[1] = i;
return rtn;
}
indexMap.put(nums[i], i);
}
return rtn;
}
}