练手小题(哈希表搜索树)

简介: 练手小题(哈希表搜索树)

1、旧键盘

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

肯定坏掉的那些键。

输入描述:

输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、

以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。


输出描述:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。

示例1

1. 输入
2. 7_This_is_a_test<br/>_hs_s_a_es
3. 输出
4. 7TI

首先我们分析一下思路哈:简单理解一下题目:就是说要让我们输出字符串1没有在字符串2中的部分(也就是字符串1中多出来的那部分,同时每个字符(大写)按照字符串中出现的顺序只可以输出1次即可),所以我们可以写一个方法来实现这个功能:首先我们要把两个字符串都改为大写的字符数组,之后用一个HashSet把s2出现的字符存放起来,然后遍历s1所在的字符数组ch1,如果HashSet中不包含ch1中的元素就把它存放到一个List当中,最后打印List中的内容即可。

AC代码:

1. import java.util.*;
2. public class Main{
3. 
4. public static void main(String[]args){
5.         Scanner scan=new Scanner(System.in);
6. while(scan.hasNextLine()){
7.             String s1=scan.nextLine();
8.             String s2=scan.nextLine();
9.             fun(s1,s2);
10.         }
11.     }
12. public static void fun(String s1,String s2){
13. char[]ch1=s1.toUpperCase().toCharArray();
14. char[]ch2=s2.toUpperCase().toCharArray();
15.         HashSet<Character>set1=new HashSet<>();
16. for(char x:ch2){
17.             set1.add(x);
18.         }
19.         List<Character> list=new ArrayList<>();
20. 
21. for(char x:ch1){
22. if(!set1.contains(x)){
23. if(!list.contains(x)){
24.                    list.add(x);
25.                }
26.             }
27.         } 
28. for(char x:list){
29.             System.out.print(x);
30.         }
31.     }
32. }

2、二叉搜索树与双向链表

描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示

数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值0≤val≤1000

要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度 O(n)O(n)

注意:

1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继

2.返回链表中的第一个节点的指针

3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构

4.你不用输出双向链表,程序会根据你的返回值自动打印输出

输入描述:

二叉树的根节点

返回值描述:

双向链表的其中一个头节点。

示例1

1. 输入:
2. {10,6,14,4,8,12,16}
3. 返回值:
4. From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4;
5. 说明:
6. 输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。

示例2

1. 输入:
2. {5,4,#,3,#,2,#,1}
3. 返回值:
4. From left to right are:1,2,3,4,5;From right to left are:5,4,3,2,1;
5. 
6. 说明:
7. 5
8.                   /
9. 4
10.               /
11. 3
12.           /
13. 2
14.       /
15. 1
16. 树的形状如上图

AC代码:

1. /**
2. public class TreeNode {
3.     int val = 0;
4.     TreeNode left = null;
5.     TreeNode right = null;
6. 
7.     public TreeNode(int val) {
8.         this.val = val;
9. 
10.     }
11. 
12. }
13. */
14. public class Solution {
15. //返回的第一个指针,即为最小值,先定为null
16. public TreeNode head = null;  
17. //中序遍历当前值的上一位,初值为最小值,先定为null
18. public TreeNode pre = null;   
19. public TreeNode Convert(TreeNode pRootOfTree) {
20. if(pRootOfTree == null)
21. //中序递归,叶子为空则返回
22. return null;     
23. //首先递归到最左最小值  
24.         Convert(pRootOfTree.left); 
25. //找到最小值,初始化head与pre
26. if(pre == null){       
27.             head = pRootOfTree;
28.             pre = pRootOfTree;
29.         }
30. //当前节点与上一节点建立连接,将pre设置为当前值
31. else{       
32.             pre.right = pRootOfTree;
33.             pRootOfTree.left = pre;
34.             pre = pRootOfTree;
35.         }
36.         Convert(pRootOfTree.right);
37. return head;
38.     }
39. }


相关文章
|
6月前
力扣面试经典题之哈希表
力扣面试经典题之哈希表
39 0
|
5月前
|
索引
力扣随机一题 6/26 哈希表 数组 思维
力扣随机一题 6/26 哈希表 数组 思维
38 0
|
4月前
|
存储 Serverless C++
【C++】手撕哈希表的闭散列和开散列
【C++】手撕哈希表的闭散列和开散列
43 1
|
5月前
|
存储 算法 大数据
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
|
6月前
|
存储
leetcode刷题之哈希表的应用(1)
leetcode刷题之哈希表的应用(1)
30 0
|
6月前
|
存储 Serverless
【数据结构】万字一文手把手解读哈希————(开/闭散列)解决哈希冲突完整详解(6)
【数据结构】万字一文手把手解读哈希————(开/闭散列)解决哈希冲突完整详解(6)
【LeetCode36】有效的数独(哈希表)
【LeetCode36】有效的数独(哈希表)
43 0
|
存储 算法 Java
Java数据结构与算法分析(十一)散列表(哈希表)
散列表(Hash Table)也叫哈希表,是根据给定关键字(Key)来计算出该关键字在表中存储地址的数据结构。也就是说,散列表建立了关键字与存储地址之间的一种直接映射关系,将关键字映射到表中记录的地址,这加快了查找速度。
186 0
|
存储 缓存 算法
【第五天】算法图解--哈希表(散列表)Hash函数
【第五天】算法图解--哈希表(散列表)Hash函数
|
存储 机器学习/深度学习 算法
【基础算法】哈希表(拉链法)
【基础算法】哈希表(拉链法)
320 0
【基础算法】哈希表(拉链法)