LeetCode Hot100 (哈希)
1. 两数之和
比较简单,建立个map,看看有没有当前对应的相反的值就可以了
class Solution {public int[] twoSum(int[] nums, int target) {TreeMap<Integer, Integer> arr=new TreeMap<Integer, Integer>();int x1=0;int x2=0;for(int i=0;i<nums.length;i++){Integer x=arr.get(target-nums[i]);if(x!=null){x1=i;x2=x;return new int[]{x,i};}arr.put(nums[i],i);}
return new int[]{x1,x2};}
}
49. 字母异位词分组
排序之后进行hash,如果存在直接放到后面,不存在,新创一个即可,最后通过stream流拿到答案
import java.util.*;
class Solution {public List<List<String>> groupAnagrams(String[] strs) {int len =strs.length;HashMap<String,List<String>> map =new HashMap<>();for(int i=0;i<len;i++){char [] chars =strs[i].toCharArray();Arrays.sort(chars);String key = Arrays.toString(chars);if(map.get(key)==null){map.put(key,new ArrayList<>());}map.get(key).add(strs[i]);}List< List <String>>ans =new ArrayList<>();ans=map.values().stream().toList();System.out.println(ans);return ans;}
}
128. 最长连续序列
建议直接排序
import java.util.*;
class Solution {public int longestConsecutive(int[] nums) {Arrays.sort(nums);int maxx=1;int sum=1;if(nums.length==0){return 0;}for(int i=1;i<nums.length;i++){if(nums[i]==nums[i-1]+1){sum++;}else if(nums[i]==nums[i-1]){continue;}else{sum=1;}maxx=Math.max(sum,maxx);}return maxx;}
}