给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
输入: [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 条评论) |