返回顶部
首页 > 资讯 > 后端开发 > Python >Java数据结构之Map与Set专篇讲解
  • 259
分享到

Java数据结构之Map与Set专篇讲解

2024-04-02 19:04:59 259人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录①只出现一次的数字②宝石与石头③坏键盘打字④复制带随机指针的链表①只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次

①只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

输入: [2,2,1]
输出: 1

首相我们可能会想到用位运算直接解决,但我们也可以用hash色条解决。


public int singleNumber(int[] nums) {
        int single = 0;
        for (int num : nums) {
            single ^= num;
        }
        return single;
    }
 

hashset也已轻松解决这个问题,将整个数组中的元素放入set,因为只出现一次的数字只有一次,所以我们将多次出现相同的数字移除


public int singleNumber(int[] nums){
 
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++){
            if (set.contains(nums[i])){
                set.remove(nums[i]);
            }else {
                set.add(nums[i]);
            }
        }
        for (int i = 0; i < nums.length; i++){
            if (set.contains(nums[i])){
                return nums[i];
            }
        }
        return -1;
 
    }

②宝石与石头

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。

输入:jewels = "aA", stones = "aAAbbbb"
输出:3

这道题和第一道题一样,这里是统计不同的个数。因为要区分大小写,所以我们将小写转大写,不影响我们做出判断


 public int numJewelsInStons(String jewels,String stons){
        stons.toUpperCase(Locale.ROOT).toCharArray();
 
        HashSet<Character> set = new HashSet<>();
 
        for (int i = 0; i < jewels.length(); i++){
            set.add(jewels.charAt(i));
        }
 
        int count = 0;
        for (char ch:stons.toCharArray()) {
            if(set.contains(ch)){
                count++;
            }
        }
        return count;
    }

③坏键盘打字

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入

7_This_is_a_test
_hs_s_a_es

输出

7TI

这道题我们要分两个set,一个setActual记录真实打出的字母,一个setBroken统计坏掉的字母,判断条件是符合的字母既不是包含setActual中已经存在的,也不是setActual与setBroken相同的字母。主要是同时对比setActual与setBroken。


public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str1 = scan.nextLine();
        String str2 = scan.nextLine();
 
        HashSet<Character> setActual = new HashSet<>();
        for (char ch:str2.toUpperCase(Locale.ROOT).toCharArray()) {
            setActual.add(ch);
        }
        HashSet<Character> setBroken = new HashSet<>();
        for (char ch: str1.toUpperCase(Locale.ROOT).toCharArray()) {
            if(!setActual.contains(ch) && !setBroken.contains(ch)){
                setBroken.add(ch);
                System.out.print(ch);;
            }
        }
    }

④复制带随机指针的链表

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。

例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]

输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]


class node {
    int val;
    Node next;
    Node random;
 
    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
 
public Node copyRandomList(Node head){
        if (head == null) return null;
        HashMap<Node,Node> map = new HashMap<>();
        Node cur = head;
        while (cur != null){
            Node node = new Node(cur.val);
            map.put(cur,node);
            cur = cur.next;
        }
        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);
 
 
    }

到此这篇关于Java数据结构之Map与Set专篇讲解的文章就介绍到这了,更多相关Java Map Set内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java数据结构之Map与Set专篇讲解

本文链接: https://lsjlt.com/news/164045.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java数据结构之Map与Set专篇讲解
    目录①只出现一次的数字②宝石与石头③坏键盘打字④复制带随机指针的链表①只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次...
    99+
    2024-04-02
  • Java数据结构中的Map与Set该怎么理解
    这篇文章主要为大家分析了Java数据结构中的Map与Set该怎么理解的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java数据结构中的Map与Set该怎么理...
    99+
    2023-06-29
  • 【数据结构】 Map和Set详解
    文章目录 🍀Map与Set的概念及场景🌳Map与Set模型介绍🎨Map 的使用📌Map说明📌Map.Entry ...
    99+
    2023-10-11
    数据结构 set Map 哈希 java
  • 【Java 数据结构】Map和Set的介绍
    目录 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法  5、 Map 和 Set 的注意点 1、Map 和 Set 的概念 Java...
    99+
    2023-09-11
    数据结构
  • python数据结构之 set
     在数学概念中,被意为整合元素的定义区域在python中,set最大的作用是用来去重 set常见操作:In [158]: s ={1,1,1,1,2,22,33,3,3,3} In [159]: sOut[159]: {1,2, 3, 22...
    99+
    2023-01-31
    数据结构 python set
  • Java数据结构之复杂度篇
    目录一.算法效率二. 时间复杂度1.时间复杂度的概念2.大O的渐进表示方法3.实例分析与计算三.空间复杂度1.空间复杂度的概念2.实例分析与计算 四.写在最后一.算法效率 ...
    99+
    2024-04-02
  • Java数据结构之顺序表篇
    目录一.线性表 二.顺序表1.概念及结构2.顺序表的实现打印顺序表获取顺序表的有效长度在pos位置新增元素判断是否包含某个元素查找某个元素对应的位置获取/查找pos位置的元...
    99+
    2024-04-02
  • Java数据结构与算法实例讲解
    这篇文章主要讲解了“Java数据结构与算法实例讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数据结构与算法实例讲解”吧! 为什么需要树这种结构数组存储方式分析:优点:通...
    99+
    2023-06-15
  • Java 数据结构与算法系列精讲之栈
    目录概述栈栈实现push方法pop方法main完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章. 栈 栈 (Stack) 是一种运算受限...
    99+
    2024-04-02
  • Java 数据结构与算法系列精讲之数组
    目录概述数组声明数组的两个方法创建数组的两个方法索引自定义数组泛型构造函数元素操作调用完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章. ...
    99+
    2024-04-02
  • JAVA数据结构篇--13线程安全的Set 集合
    前言:java 中用于存放不重复元素的set 集合,其中无序的HashSet,以及有序的LinkedHashSet和TreeSet 都是非线程安全的,那么多线程环境下,我们要存放不重复的元素,需要使用哪种集合进行数据存取; 1 使用: S...
    99+
    2023-08-17
    java 数据结构 开发语言
  • python数据结构之搜索讲解
    目录1. 普通搜索2. 顺序搜索1.1 无序下的顺序查找1.2 有序下的顺序查找2.二分查找3.散列查找3.1 几种散列函数3.2 处理散列表冲突3.3 散列表的实现(加1重复)4....
    99+
    2024-04-02
  • Java 数据结构与算法系列精讲之队列
    目录概述队列队列实现enqueue 方法dequeue 方法main完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章. 队列 队列 (Q...
    99+
    2024-04-02
  • Java深入了解数据结构之哈希表篇
    目录1,概念2,冲突-避免3,冲突-避免-哈希函数设计4,冲突-避免-负载因子调节5,冲突-解决-闭散列①线性探测②二次探测6,冲突-解决-开散列/哈希桶7,完整代码1,概念 顺序结...
    99+
    2024-04-02
  • Java数据结构与算法系列精讲之KMP算法
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. KMP 算法 KMP (Knuth-Morris-Pratt), 是一种改进的字符串匹配算法...
    99+
    2024-04-02
  • Java 数据结构与算法系列精讲之汉诺塔
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 汉诺塔 汉诺塔 (Tower of Hanoi) 是一个源于印度的古老益智玩具. 汉诺塔由三...
    99+
    2024-04-02
  • Java数据结构与算法系列精讲之二叉堆
    目录概述优先队列二叉堆二叉堆实现获取索引添加元素siftUp完整代码概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 优先队列 优先队列 (P...
    99+
    2024-04-02
  • Java数据结构与算法系列精讲之红黑树
    目录概述红黑树红黑树的实现Node 类添加元素左旋右旋完整代码概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 红黑树 红黑树 (Red Bl...
    99+
    2024-04-02
  • ES6中Set和Map数据结构的示例分析
    这篇文章主要介绍了ES6中Set和Map数据结构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ES6 的 Set:ES6 提供了新...
    99+
    2024-04-02
  • java 数据结构之栈与队列
    java 数据结构之栈与队列一:对列队列是一种先进先出的数据结构实现代码:package Queue; public class Queue { //队列类 private int maxSize; //定义队列的长度 ...
    99+
    2023-05-31
    java 队列
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作