哈希表理论基础
哈希表理论:代码随想录
核心:什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
242.有效的字母异位词
文章讲解:代码随想录
思路: 把数组作为一个哈希表,字母在字母表中的相对位置最为key,共同使用一个数组,看最后是否可以抵消
代码:
class Solution {
public boolean isAnagram(String s, String t) {
int[] record = new int[26];
for (int i = 0; i < s.length(); i++) {
record[s.charAt(i) - 'a']++;
}
for (int i = 0; i < t.length(); i++) {
record[t.charAt(i) - 'a']--;
}
for (int item : record) {
if (item != 0) {
return false;
}
}
return true;
}
}
349. 两个数组的交集
题目链接: 力扣题目链接
代码:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int max1 = -1, max2 = -1;
for (int i = 0; i < nums1.length; i++) {
if (nums1[i] > max1) {
max1 = nums1[i];
}
}
for (int i = 0; i < nums2.length; i++) {
if (nums2[i] > max2) {
max2 = nums2[i];
}
}
int[] n1 = new int[max1 + 1];
int[] n2 = new int[max2 + 1];
for (int item : nums1) {
n1[item]++;
}
for (int item : nums2) {
n2[item]++;
}
int[] is = new int[Math.min(max1, max2) + 1];
int count = 0;
for (int i = 0; i <= Math.min(max1, max2); i++) {
if (n1[i] != 0 && n2[i] != 0) {
is[count] = i;
count++;
}
}
int[] is1 = new int[count];
for (int i = 0; i < count; i++) {
is1[i] = is[i];
}
return is1;
}
}
202. 快乐数
题目链接:力扣题目链接
文章讲解: 代码随想录
代码:
class Solution {
public boolean isHappy(int n) {
int number = n;
HashSet<Integer> hs = new HashSet();
while (true) {
int sum = 0;
while (number > 0) {
sum += (number % 10) * (number % 10);
number /= 10;
}
number = sum;
if (number == 1) {
break;
} else if (hs.contains(number)) {
return false;
} else {
hs.add(number);
}
}
return true;
}
}
1. 两数之和
题目链接:力扣题目链接
文章讲解:代码随想录
暴力循环
代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] index = new int[2];
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if(nums[i] + nums[j] == target) {
index[0] = i;
index[1] = j;
break;
}
}
}
return index;
}
}
哈希法
代码:
import java.util.Hashtable;
class Solution {
public int[] twoSum(int[] nums, int target) {
Hashtable<Integer, Integer> ht = new Hashtable<Integer, Integer>();
int[] index = new int[2];
for (int i = 0; i < nums.length; i++) {
ht.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (ht.containsKey(complement) && ht.get(complement) != i) {
index[0] = i;
index[1] = ht.get(complement);
break;
}
}
return index;
}
}