两数之和
leetcode.cn/problems/tw…
- 哈希表,key:原值,value:target-原值
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map = new HashMap<>();
int[] res = new int[2];
for(int i=0;i<nums.length;i++){
int t=target-nums[i];
if(map.containsKey(t)&&map.get(t)!=i) {
res[0] = i;
res[1] = map.get(t);
return res;
}
map.put(nums[i],i);
}
return res;
}
}
移动0
leetcode.cn/problems/mo…
- 双指针,r指针遍历,l指针将非0值存入,然后将剩余值赋0
class Solution {
public void moveZeroes(int[] nums) {
int l=0;
for(int i =0;i<nums.length;i++){
if(nums[i]!=0){
nums[l]=nums[i];
l++;
}
}
for(int i=nums.length-1;i>=l;i--){
nums[i]=0;
}
}
}
字母异位词分组
leetcode.cn/problems/gr…
- 哈希表,字母异位:都存在xxx字母的词。
- 所以将所有元素排序,然后作为key
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,List<String>> map = new HashMap<>();
for(String s:strs){
char[] chars = s.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
if(!map.containsKey(key)){
map.put(key,new ArrayList<>());
}
map.get(key).add(s);
}
return new ArrayList<>(map.values());
}
}