首页 > 作文

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

更新时间:2023-04-04 19:27:50 阅读: 评论:0

目录
①只出现一次的数字②宝石与石头③坏键盘打字④复制带随机指针的链表

①只出现一次的数字

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

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

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

public int singlenumber(int[] nums) {        int single = 0;    最小值函数    for (int num : nums) {            single ^= num;        }        return single;    } 

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

public int singlenumber(int[] nums){         hasht<integer> t = new hasht<>();        for (int i = 0; i < nums.length; i++){    助学贷款        if (t.contains(nums[i])){                t.remove(nums[i]);            }el {                t.add(nums[i]);            }        }        for (int i = 0; i < nums.length; i++){            if (t.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.toupperca(locale.root).tochararray();         hasht<character> t = new hasht<>();         for (int i = 0; i < jewels.length(); i++){            t.add(jewels.charat(i));        }         int count = 0;        for (char ch:stons.tochararray()) {            if(t.contains(ch)){                count++;            }        }        return count;    }

③坏键盘打字

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

输入

7_this_is_a_test

_hs_s_a_es

输出

7ti

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

public static void main(string[] args) {        scanner scan = new scanner(system.in);        string str1 = scan.nextline();        stri民事ng str2 = scan.nextline();         hasht<character> tactual = new hasht<>();        for (char ch:str2.toupperca(locale.root).tochararray()) {            tactual.add(ch);        }        hasht<character> 量分tbroken = new hasht<>();        for (char ch: str1.toupperca(locale.root).tochararray()) {            if(!tactual.contains(ch) && !tbroken.contains(ch)){                tbroken.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与t专篇讲解的文章就介绍到这了,更多相关java map t内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 19:27:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b09d3f0a6ef4095668e0ef79e895da5b.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java数据结构之Map与Set专篇讲解.doc

本文 PDF 下载地址:Java数据结构之Map与Set专篇讲解.pdf

标签:节点   链表   指针   石头
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图