哈希表理论基础
Java中的哈希结构
hashMap
概念
常用函数
treeMap
概念
常用函数
hashSet
概念
常用函数
对比
242.有效的字母异位词
每个字母出现的次数存储至一个长度为26的数组,再逐位进行比较
class Solution {
public boolean isAnagram(String s, String t) {
//使用数组做哈希表
int[] records=new int[26];
int[] recordt=new int[26];
for(int i=0;i<s.length();i++){
records[s.charAt(i)-'a']+=1;
}
for(int i=0;i<t.length();i++){
recordt[t.charAt(i)-'a']+=1;
}
for(int j=0;j<records.length;j++){
if(records[j]!=recordt[j]){
return false;
}
}
return true;
}
}
349. 两个数组的交集
先利用哈希表简化数组,再判断一个表里的元素是否与另一个相交
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
List<Integer> result = new ArrayList<>();
HashMap<Integer, Integer> nums1Map = new HashMap<Integer, Integer>();
HashMap<Integer, Integer> nums2Map = new HashMap<Integer, Integer>();
for(int i=0;i<nums1.length;i++){
if(!nums1Map.containsKey(nums1[i])){
nums1Map.put(nums1[i],1);
}
}
for(int i=0;i<nums2.length;i++){
if(!nums2Map.containsKey(nums2[i])){
nums2Map.put(nums2[i],1);
}
}
if(nums1Map.size()<=nums2Map.size()){
for(Integer key : nums1Map.keySet()) {
if(nums2Map.containsKey(key)){
result.add(key);
}
}
}else{
for(Integer key : nums2Map.keySet()) {
if(nums1Map.containsKey(key)){
result.add(key);
}
}
}
int[] results = new int[result.size()];
for(int i = 0;i<result.size();i++){
results[i] = result.get(i);
}
return results;
}
}
202. 快乐数
//求和过程中sum会重复出现则会无限循环,不循环则一定可以到1
class Solution {
public boolean isHappy(int n) {
HashSet<Integer> happy = new HashSet<>();
while(!happy.contains(n)&&n!=1){
happy.add(n);
n=getNextNumber(n);
}
return n==1;
}
private int getNextNumber(int n){
int res = 0;
while (n > 0) {
int temp = n % 10;
res += temp * temp;
n = n / 10;
}
return res;
}
}
1.两数之和
class Solution {
public int[] twoSum(int[] nums, int target) {
List<Integer> keyList = new ArrayList<>();
int[] result;
HashMap<Integer, Integer> number = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
number.put(i,nums[i]);
}
for (Integer i : number.keySet()) {
int value=number.get(i);
if(number.containsValue(target-value)){
for(int key=i+1;key<number.size();key++){
if(number.get(key)==target-value){
result=new int[]{i,key};
return result;
}
}
}
}
return null;
}
}