菜鸡学JAVA刷力扣之hot100 1.两数之和 49.字母异位词分组

两数之和

拙见:

使用哈希表保存遍历过的数和下标,每次遍历数组中的数的时候->都将其跟目标值相减,然后判断哈希表中是否存在所需要的另外一个值,若存在则返回这两个值的下标。若不存在则继续遍历直到遍历完数组。

代码:

  public int[] twoSum(int[] nums, int target) {
      Map<Integer,Integer> mp = new HashMap<>();//新建hash表
      for(int i=0;i<=nums.length;i++){//遍历数组
          if(mp.containsKey(target-nums[i])){//判断是否有两个数组成目标值
              return new int[]{i,mp.get(target-nums[i])};
          }
          mp.put(nums[i],i);//每次遍历不存在则将键值对存入哈希表
      }
      return new int[]{};
  }
}

总结

Map<Integer,Integer> mp = new HashMap<>()//创建新表
mp.containsKey(key)//若存在某个key则返回1
mp.put(key,value)//将key和value存入hash表

字母异位词分组

拙见:使用哈希表保存排序后的字符串作为key,字符串列表作为value。

 public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap();
        for(String str :strs){
            String sortedstr = getSortStr(str);
            if(!map.containsKey(sortedstr)){
                map.put(sortedstr,new ArrayList());
            }
            map.get(sortedstr).add(str);
        
        }
        return new ArrayList(map.values());
    }
    public String getSortStr(String str){
        char[] res = str.toCharArray();
        Arrays.sort(res);
        return new String(res);
  }

总结

for(String str :strs)//简洁遍历,但无索引----->后续需要字符串排序函数
map.get(sortedstr).add(str);//链式操作,直接在哈希表对应key处加value
str.toCharArray();//字符串转换成字符数组
posted @ 2025-05-19 17:09  柳成荫y  阅读(23)  评论(0)    收藏  举报