1. 两数之和
比较简单,建立个map,看看有没有当前对应的相反的值就可以了
java
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流拿到答案
java
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. 最长连续序列
建议直接排序
java
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;
}
}