剑指 Offer II 033. 变位词组&剑指 Offer II 035. 最小时间差 -做题总结和心得(剑指offer进阶-哈希表部分)

剑指 Offer II 033. 变位词组
在这里插入图片描述
该题解法是hash+sort,答案是评论区大佬写的。

/*
大体思路:创建一个哈希表 

再将每个字符串变成字符数组 排序后若哈希表里不存在排序后的字符串,则创建索引,

然后将原字符串放进对应索引的数组里
 */
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //创建一个哈希表
        Map<String,List<String>> map = new HashMap<>();
        //对于给定的字符数组的每个字符串
        for(String str : strs){
            //变为字符数组
            char[] ch = str.toCharArray();
            //将的得到的字符数组排序
            Arrays.sort(ch);
            //排序后的字符数组变成字符串
            String s = new String(ch);
            //判断哈希表里是否存在对应的索引
            if(!map.containsKey(s)){
                map.put(s,new ArrayList<>());
            }
            //注意:将原字符串存入
            map.get(s).add(str);
        }
        //map.values()->List<String>
        return new ArrayList<>(map.values());

    }
}

剑指 Offer II 035. 最小时间差
在这里插入图片描述
解题思路:排除大小大于 24*60 的情况,设置最大值 然后把时间排序,不断遍历计算两个时间点之间的差值取最小值返回即可。
解法见评论区的大佬:
在这里插入图片描述

class Solution {
    public int findMinDifference(List<String> timePoints) {
        //因为时间精确到分钟,所以时间点只有24*60个
        if (timePoints.size() > 24 * 60) {
            return 0;
        }
        //创建用于储存分钟的数组
        List<Integer> mins = new ArrayList<>();

        for (String t : timePoints) {
            //将时间以:分开
            String[] time = t.split(":");
            //将时间转化为分钟
            mins.add(Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]));
        }
        //用Collecting的sort方法为分钟排序1
        Collections.sort(mins);
        //将最小值加上一天的分钟数,作为最大值放在最后,用于计算最后一个值和最大值的差值
        mins.add(mins.get(0) + 24 * 60);
        //初始化我们的结果
        int res = 24 * 60;
        //计算相邻数的差值,不断用最小值对res进行替换
        for (int i = 1; i < mins.size(); ++i) {
            res = Math.min(res, mins.get(i) - mins.get(i - 1));
        }
        //返回结果
        return res;
    }
}

膜拜大佬

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值