【Map与Set】之LeetCode&牛客练习

导读:本篇文章讲解 【Map与Set】之LeetCode&牛客练习,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1. 只出现一次的数字

2. 复制带随机指针的链表

3. 宝石与石头

4. 旧键盘

5. 前k个高频单词


1. 只出现一次的数字

题目链接: 136. 只出现一次的数字

题目要求:

【Map与Set】之LeetCode&牛客练习

分析一下:

【Map与Set】之LeetCode&牛客练习

 上代码:

    //2.使用集合 
    //时间复杂度:O(n)
    public int singleNumber(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for(int i = 0; i < nums.length; i++) {
            int key = nums[i];
            if(!set.contains(key)) {
                set.add(nums[i]);
            }else {
                set.remove(key);
            }
        }
        //此时集合,就剩一个元素了 找到这个元素
        for(int i = 0; i < nums.length; i++) {
            int key = nums[i];
            if(set.contains(key)) {
                return nums[i];
            }
        }
        return -1;
    }

 

2. 复制带随机指针的链表

题目链接: 138. 复制带随机指针的链表

题目要求:

【Map与Set】之LeetCode&牛客练习

分析一下:

【Map与Set】之LeetCode&牛客练习

上代码:

class Solution {
    public Node copyRandomList(Node head) {
        //注意不能使用treemap不然不能比较
        Map<Node,Node> map = new HashMap<>();
        //1.第一次遍历链表
        Node cur = head;
        while(cur != null) {
            Node node = new Node(cur.val);
            map.put(cur,node);
            cur = cur.next;
        }
        //2.第二次遍历链表
        cur = head;
        while(cur != null) {
            map.get(cur).next = map.get(cur.next);
            map.get(cur).random = map.get(cur.random);
            cur = cur.next;
        }
        return map.get(head);
    }
}

 

3. 宝石与石头

题目链接: 771. 宝石与石头

题目要求:

【Map与Set】之LeetCode&牛客练习

 分析一下:

【Map与Set】之LeetCode&牛客练习 

上代码:

class Solution {
    public int numJewelsInStones(String jewels, String stones) {
        Set<Character> set = new HashSet<>();
        //把宝石放进集合中
        for(char ch : jewels.toCharArray()) {
            set.add(ch);
        }
        int count = 0;
        //遍历石头,在石头中找宝石,计数++
        for(char ch : stones.toCharArray()) {
            if(set.contains(ch)) {
                count++;
            }
        }
        return count;
    }
}


 

4. 旧键盘

题目链接: 旧键盘 (20)__牛客网 (nowcoder.com)

题目要求:

【Map与Set】之LeetCode&牛客练习

分析一下:

【Map与Set】之LeetCode&牛客练习

上代码:

import java.util.*;

public class Main {
    public static void func(String str1,String str2) {
        Set<Character> set = new HashSet<>();
        //str2先转大写,再转数组,然后放入集合
        for(char ch : str2.toUpperCase().toCharArray()) {
            set.add(ch);
        }
        //遍历希望输入的,转为大写,再转数组,和实际输入进行比较
         Set<Character> set2 = new HashSet<>();
         for(char ch : str1.toUpperCase().toCharArray()) {
            if(!set.contains(ch) && !set2.contains(ch)) {
                System.out.print(ch);
                set2.add(ch);
            }
        }
    }
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()) {
            String str1 = scan.nextLine();//希望输入的
            String str2 = scan.nextLine();//实际输入的
            
            func(str1,str2);
        }
    }
}


 

5. 前k个高频单词

题目链接: 692. 前K个高频单词

题目要求:

【Map与Set】之LeetCode&牛客练习

分析一下:

【Map与Set】之LeetCode&牛客练习

 上代码:

class Solution {
    public List<String> topKFrequent(String[] words, int k) {
        //1.统计单词出现的次数
        Map<String,Integer> map = new HashMap<>();
        for(String key : words) {
            if(map.get(key) == null) {
                map.put(key,1);
            }else {
                int val = map.get(key);
                map.put(key,val+1);
            }
        }
        //2.建立大小为k的小根堆
        PriorityQueue<Map.Entry<String,Integer>> minQ = new PriorityQueue<>(k,new Comparator<Map.Entry<String,Integer>>(){
            @Override
            public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2) {
                //单词出现次数相同时,调整以key为准的大根堆
                if(o1.getValue().compareTo(o2.getValue()) == 0) {
                    return o2.getKey().compareTo(o1.getKey());
                }
                return o1.getValue().compareTo(o2.getValue());
                //根据单词出现的次数创建小根堆
            }
        });

        //3.遍历map,先给小根堆放满k个,然后从第k+1开始,和堆顶元素比较
        for(Map.Entry<String,Integer> entry : map.entrySet()) {
            if(minQ.size() < k) {
            //如果小根堆没有放满,就继续放    
                minQ.offer(entry);
            }else {
                //如果已经放满了小根堆,那么此时就要让当前元素和堆顶元素进行比较
                Map.Entry<String,Integer> top = minQ.peek();
                if(top != null) {
                    if(entry.getValue() > top.getValue()) {
                    minQ.poll();
                    minQ.offer(entry);
                    }else {
                        //如果此时<不用管,但如果=,就要根据题意按字典顺序排
                        if(top.getValue().compareTo(entry.getValue()) == 0) {
                            //value一样,看key
                            if(top.getKey().compareTo(entry.getKey()) > 0) {
                                minQ.poll();
                                minQ.offer(entry);
                            }
                        }
                    }
                }
                
            }
        }
        //此时前k个次数最多的单词,已经全部放入堆中了,将堆中元素出堆
        List<String> ret = new ArrayList<>();
        for(int i = 0; i < k; i++) {
            Map.Entry<String,Integer> top  = minQ.poll();
            if(top != null) {
                ret.add(top.getKey());
            }
            
        }
        //前面是小根堆出堆的,根据次数高到低的要求,这就要逆置
        Collections.reverse(ret);
        return ret;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91243.html

(0)
小半的头像小半
0 0

相关推荐

  • @transactional注解 技术随笔

    @transactional注解

    0 0108
    飞熊的头像 飞熊
    2023年3月9日
  • 新版IDEA中,module模块无法被识别,类全部变成咖啡杯无法被识 技术随笔

    新版IDEA中,module模块无法被识别,类全部变成咖啡杯无法被识

    0 0147
    飞熊的头像 飞熊
    2024年1月3日
  • 【SpringCloud 2021.0.0】13、路由网关Gateway之入门案例 (spring-boot 2.6.3) 技术随笔

    【SpringCloud 2021.0.0】13、路由网关Gateway之入门案例 (spring-boot 2.6.3)

    0 0125
    小半的头像 小半
    2023年1月6日
  • Linux常见命令 26 – RPM包管理-yum在线管理 技术随笔

    Linux常见命令 26 – RPM包管理-yum在线管理

    0 0126
    小半的头像 小半
    2023年2月1日
  • 【Github】知识合集 技术随笔

    【Github】知识合集

    0 0145
    seven_的头像 seven_
    2023年2月22日
  • 组件的自定义事件① 技术随笔

    组件的自定义事件①

    0 059
    飞熊的头像 飞熊
    2023年3月3日
  • K8S之yaml 文件详解(pod、deployment、service) 技术随笔

    K8S之yaml 文件详解(pod、deployment、service)

    0 0148
    飞熊的头像 飞熊
    2023年3月7日
  • vmware虚拟机显示屏幕太小问题解决 技术随笔

    vmware虚拟机显示屏幕太小问题解决

    0 0372
    飞熊的头像 飞熊
    2024年1月5日
  • 通用springboot框架 技术随笔

    通用springboot框架

    0 084
    飞熊的头像 飞熊
    2023年4月21日
  • 《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit 技术随笔

    《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit

    0 092
    小半的头像 小半
    2023年2月16日
  • springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显 技术随笔

    springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显

    0 0115
    小半的头像 小半
    2023年2月15日
  • 微信小程序开发之WXML模板语法 技术随笔

    微信小程序开发之WXML模板语法

    0 0229
    小半的头像 小半
    2023年2月7日

站长精选

  • 基于Docker和MongoDB部署NodeBB论坛系统

    基于Docker和MongoDB部署NodeBB论坛系统

    2022年11月21日

  • 一碰就头疼的 Kafka 消息重复问题,立马解决!

    一碰就头疼的 Kafka 消息重复问题,立马解决!

    2023年1月28日

  • Docker 入门终极指南,详细版!别再说不会用 Docker 了!

    Docker 入门终极指南,详细版!别再说不会用 Docker 了!

    2023年7月20日

  • 2万字总结:带你全面认识 Nginx !

    2万字总结:带你全面认识 Nginx !

    2023年12月22日

  • 一个简单易用的家庭库存管理系统、已开源

    一个简单易用的家庭库存管理系统、已开源

    2023年9月17日

  • 运行和管理数百个 Kubernetes 集群需要什么?

    运行和管理数百个 Kubernetes 集群需要什么?

    2023年9月5日

  • 加密后的敏感字段还能进行模糊查询吗?该如何实现?

    加密后的敏感字段还能进行模糊查询吗?该如何实现?

    2023年5月27日

  • MySQL中如何高效的实现模糊查询(附30条优化建议)

    MySQL中如何高效的实现模糊查询(附30条优化建议)

    2023年4月1日

  • OpenFeign 万字教程详解

    OpenFeign 万字教程详解

    2023年9月17日

  • 太卷了,一款高颜值的企业级物联网系统,功能非常强大!

    太卷了,一款高颜值的企业级物联网系统,功能非常强大!

    2024年3月3日

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!

深圳SEO优化公司大浪外贸网站建设公司西乡网站定制推荐毕节网页设计报价玉树建站哪家好武威网络推广公司绥化百度竞价包年推广南山企业网站制作价格长春建站公司济宁企业网站设计报价威海网站搭建哪家好茂名网站制作多少钱海南百度标王报价铜陵seo网站推广价格长治建网站报价铜陵百姓网标王报价广元推广网站哪家好忻州SEO按天收费公司光明百度爱采购价格伊春网站推广系统多少钱红河网络营销公司同乐网站推广报价沧州网站优化排名汕尾网站推广方案哪家好长葛网站排名优化西宁外贸网站制作哪家好焦作SEO按天扣费天水网站seo优化公司光明高端网站设计固原外贸网站建设多少钱那曲模板制作多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化