这里记录刷hot100的思考过程详解,方便后续记忆复习。
题号1
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
具体题解
java
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> hashmap=new HashMap<>();
int i=0;
for(int num:nums){
if(hashmap.containsKey(target-nums[i])){
return new int[]{i,hashmap.get(target-nums[i])};
}
hashmap.put(nums[i],i);
i++;
}
return new int[0];
}
}
思路解析
通过containsKey查找之前是否存入过target-num[i]
必会知识
1.containsKey函数
2.数组初始化new int[]{x,y}
题号49
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
具体题解
java
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map=new HashMap<>();
for(String str:strs){
char[] array=str.toCharArray();
Arrays.sort(array);
String key=new String(array);
List<String> list=map.getOrDefault(key,new ArrayList<String>());
list.add(str);
map.put(key,list);
}
return new ArrayList<List<String>>(map.values());
}
}
思路解析
对每个字符串排序,异位词排序后一定相同。
必会知识
1.字符串转为字符数组,toCharArray()
2.字符数组排序,Arrays.sort()
3.字符串可通过字符数组初始化,new String(array)
4.获取原有异位词集合或新集合列表,getOrDefault(key,new ArrayList<String>());
5.只获取hashmap的value值集合,map.values()
题号128
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)的算法解决此问题。
具体题解
java
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> hashset=new HashSet<>();
for(int num:nums){
hashset.add(num);
}
int max=0;
for(int num:hashset){
if(!hashset.contains(num-1)){
int currentnum=num;
int currentmax=1;
while(hashset.contains(currentnum+1)){
currentmax+=1;
currentnum+=1;
}
max=Math.max(max,currentmax);
}
}
return max;
}
}
思路解析
先通过hashset去重,然后找到每个连续序列的最开始数字,去遍历计算最长序列。
必会知识
hashset的使用
