hot100

6 阅读1分钟

两数之和

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());
    }
}