day23(12.3)——leetcode面试经典150

49. 字母异位词分组

49. 字母异位词分组

我傻逼了,我以为要排序呢,搁那库库捣鼓List<List<String>>怎么排序,结果竟然不用我排

题目:

题解:

java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> list = new ArrayList<>();
        Map<String,List<String>> map = new HashMap<>();
        for(int i=0;i<strs.length;i++) {
            String s = strs[i];
            char[] chars = s.toCharArray();
            Arrays.sort(chars);
            s = new String(chars);
            //如果ls中存在该值,则说明有对应的异构词
            if(map.containsKey(s)) {
                List<String> ss = map.get(s);
                ss.add(strs[i]);
                map.replace(s,ss);
            }
            //ls中不存在该值,则说明不存在,进行创建
            else {
                List<String> ss = new ArrayList<>();
                ss.add(strs[i]);
                map.put(s, ss);
            }
        }
        for (Map.Entry<String, List<String>> entry : map.entrySet()) {
            List<String> value = entry.getValue();
            //这里是List集合,不能用Arrays.sort()来排序
            // Arrays.sort(value);
            // Collections.sort(value);
            list.add(value);
        } 
        // Collections.sort(list);不能这么直接进行排序
        // list.sort(Comparator.comparingInt((List<String> x) -> x.size())
        //       .thenComparing((List<String> a, List<String> b) -> {
        //           for (int i = 0; i < Math.min(a.size(), b.size()); i++)                 {
        //               int cmp = a.get(i).compareTo(b.get(i));
        //               if (cmp != 0) return cmp;
        //             }
        //           return 0;
        //       }));
        return list;
    }
}

1. 两数之和

1. 两数之和

题目:

题解:

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        //转成list能直接找到下标
        List<Integer> list = Arrays.stream(nums)
    .boxed()
    .collect(Collectors.toList());
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++) {
            map.put(nums[i], map.getOrDefault(nums[i], 0)+1);
        }
        for(int i=0;i<nums.length;i++) {
            if(map.containsKey(target-nums[i])&&map.get(target-nums[i])>=1) {
                //如果两个数相等
                if(nums[i]==target-nums[i]&&map.get(target-nums[i])>=2) {
                    //直接返回两个数的下标
                    return new int[]{i,list.lastIndexOf(nums[i])};
                }
                else if(nums[i]!=target-nums[i]){
                    return new int[]{i,list.indexOf(target-nums[i])};
                }
            }
        }
        return new int[2];
    }
}

看了题解,发现这么简单!!!

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++) {
            if(map.containsKey(target-nums[i])) {
                return new int[]{i,map.get(target-nums[i])};
            }
            map.put(nums[i],i);
        }
        //因为一定存在,所以直接返回一个空的长度为2的数组就行了
        return new int[2];
    }
}
相关推荐
云原生指北2 小时前
GitHub Copilot SDK 入门:五分钟构建你的第一个 AI Agent
java
Leinwin6 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
薛定谔的悦7 小时前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
enjoy嚣士7 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
罗超驿7 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
盐水冰8 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
凸头8 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141598 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
努力也学不会java9 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
攒了一袋星辰9 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql