49. 字母异位词分组
我傻逼了,我以为要排序呢,搁那库库捣鼓List<List<String>>怎么排序,结果竟然不用我排
题目:


题解:
java
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> list = new ArrayList<>();
Map<String,List<String>> map = new HashMap<>();
for(int i=0;i<strs.length;i++) {
String s = strs[i];
char[] chars = s.toCharArray();
Arrays.sort(chars);
s = new String(chars);
//如果ls中存在该值,则说明有对应的异构词
if(map.containsKey(s)) {
List<String> ss = map.get(s);
ss.add(strs[i]);
map.replace(s,ss);
}
//ls中不存在该值,则说明不存在,进行创建
else {
List<String> ss = new ArrayList<>();
ss.add(strs[i]);
map.put(s, ss);
}
}
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
List<String> value = entry.getValue();
//这里是List集合,不能用Arrays.sort()来排序
// Arrays.sort(value);
// Collections.sort(value);
list.add(value);
}
// Collections.sort(list);不能这么直接进行排序
// list.sort(Comparator.comparingInt((List<String> x) -> x.size())
// .thenComparing((List<String> a, List<String> b) -> {
// for (int i = 0; i < Math.min(a.size(), b.size()); i++) {
// int cmp = a.get(i).compareTo(b.get(i));
// if (cmp != 0) return cmp;
// }
// return 0;
// }));
return list;
}
}
1. 两数之和
题目:


题解:
java
class Solution {
public int[] twoSum(int[] nums, int target) {
//转成list能直接找到下标
List<Integer> list = Arrays.stream(nums)
.boxed()
.collect(Collectors.toList());
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++) {
map.put(nums[i], map.getOrDefault(nums[i], 0)+1);
}
for(int i=0;i<nums.length;i++) {
if(map.containsKey(target-nums[i])&&map.get(target-nums[i])>=1) {
//如果两个数相等
if(nums[i]==target-nums[i]&&map.get(target-nums[i])>=2) {
//直接返回两个数的下标
return new int[]{i,list.lastIndexOf(nums[i])};
}
else if(nums[i]!=target-nums[i]){
return new int[]{i,list.indexOf(target-nums[i])};
}
}
}
return new int[2];
}
}
看了题解,发现这么简单!!!
java
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++) {
if(map.containsKey(target-nums[i])) {
return new int[]{i,map.get(target-nums[i])};
}
map.put(nums[i],i);
}
//因为一定存在,所以直接返回一个空的长度为2的数组就行了
return new int[2];
}
}