242
哈希表三种实现,这里是普通的数组。
class Solution {
public boolean isAnagram(String s, String t) {
int[] arr = new int[26];
int lens = s.length(),lent = t.length();
if(lens != lent){
return false;
}
for(int i=0; i < lens; i++){
arr[s.charAt(i) - 'a']++;
}
for(int i=0; i < lens; i++){
arr[t.charAt(i) - 'a']--;
if(arr[t.charAt(i)-'a'] < 0){
return false;
}
}
return true;
}
}
349
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int len = nums1.length, len2 = nums2.length;
Set<Integer> set = new HashSet<>();//这些容器里必须装包装类Integer而不是int
Set<Integer> reset = new HashSet<>();
for(int i=0; i < len; i++){
set.add(nums1[i]);
}
for(int i=0; i < len2; i++){
if(set.contains(nums2[i])){
reset.add(nums2[i]);
}
}
int num = reset.size();
int[] ans = new int[num];
int index = 0;
for(int i: reset){//注意这样遍历set,也可以这样遍历数组
ans[index++] = i;
}
return ans;
}
}
202
有一些细节要注意。
其实可以不用将数字转化为数组,会有点慢,直接通过余数得到值也可以。
class Solution {
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<>();
while(n != 1){
//字符串变数组,int num = Integer.parseInt(s);
//数字变字符串
String s = String.valueOf(n);
int sum = 0;
for(int i=0; i < s.length(); i ++){//字符串遍历不能通过for(char ch: s)
int num = s.charAt(i) - '0';
sum += num * num;
}
if(set.contains(sum)){
return false;
}else{
set.add(sum);
}
n = sum;
}
return true;
}
}
1
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for(int i=0; i < nums.length; i++){
map.put(nums[i], i);//map用put
}
for(int i = 0; i < nums.length; i++){
//System.out.println(i);
if(map.containsKey(target - nums[i])){//注意不能重复
if(map.get(target - nums[i]) != i){
return new int[]{i, map.get(target - nums[i])};
}
}
}
return null;
}
}