2024年java基础421例题

java基础421例题目录 一 习题一 只出现一次的数字 二 习题二 随机链表的复制 三 习题三 宝石与石头 四 习题四 旧键盘 五 习题五 前 k 个高频单词 总结 一 习题一 只出现一次的数字 题的传送门 只出现一次的数字

大家好,我是讯享网,很高兴认识大家。



目录

❄️一、习题一(只出现一次的数字):

❄️二、习题二(随机链表的复制):

❄️三、习题三(宝石与石头):

 ❄️四、习题四(旧键盘):

 ❄️五、习题五(前k个高频单词):

 ❄️总结:


❄️一、习题一(只出现一次的数字):

         ☑ 题的传送门:

                      只出现一次的数字


这道题呢,有两种快速的解法,其一就是用 ^ 运算,其二就是使用 HashSet 来计算,我们一一来看,这些的解法:

其一:(^解法)

      我们呢在  相同的数字 ^  的时候呢就会为 0 ,所以我们的数字在 ^ 的时候呢,最后的出的数字就是我们的出现一次的数字,比如 1^1^2 = 2

代码:

 
讯享网 

 其一:(HashSet的解法)

         我们每次检查 HashSet 中呢是否有 nums[i] 这个数值,如果有呢就把这个数值从 HashSet中删除,如果没有这个数值,就把其入 HashSet 中,最后在 HashSet 中的数值就是我们要找的值

代码:

讯享网

❄️二、习题二(随机链表的复制):

         ☑ 题的传送门:

                      随机链表的复制


    这道题呢不是简单得直接把 链表复制下来就结束的。这道题呢还是比较麻烦的,这个需要深拷贝的,这里呢,我们使用 HashMap 来做。

          因为呢 我们这道题的 random 可能指向的是自己也可能是空,也可能是 跳跃的指向。而且我们拷贝之后呢,我们新的节点是一个 新的地址 ,这样呢我们直接拷贝的话,我们的 next 和 random 这个就不是指向我们下一个节点了。

步骤: 

1、我们先把链表的节点的值拷贝到 HashMap 中

2、我们的 HashMap 里面存放的是 <Node,Node> 

3、根据我们 HashMap 中拷贝的节点值,再把对应的 next 和 random 拷贝进去。

 

OK,理解这个步骤之后呢,我们来看看代码如何编写的: 

 

❄️三、习题三(宝石与石头):

         ☑ 题的传送门:

                        宝石与石头


       这个题呢还是比较简单的,我们直接使用 HashSet 就可以快速解决。

步骤:

1、我们先把 “宝石” 中的每一个字符放到 HashSet 中

2、遍历 “石头” 这个字符串,之后查看 HashSet 中是否存在 这个字符,如果存在 count++

是不是非常简单,所以呢我们来看看代码:

讯享网

OK,这个题就是这个样子的非常的简单的,我们来看看下一道题。


 ❄️四、习题四(旧键盘):

         ☑ 题的传送门:

                      旧键盘


     这个题呢和我们上面的题呢是差不多的思路。

步骤:

1、先把 两个字符串 都转换成大写的

2、之后把 键盘坏的打的字符串 都放到 HashSet 中

3、我们再创建一个 HashSet ,遍历 好的键盘的打出来的字符 

4、如果开始的那个 HashSet 中没有 好的字符 并且 后创建的那个 HashSet 中没有这个字符的话,就将其打印出来,并且放到后面的 HashSet 中。

这个题呢,还是比较好理解的,所以呢我们直接来看代码如何编写的:

 

OK,这个就是这个题的代码,上面的那个题麻烦一些。


 ❄️五、习题五(前k个高频单词):

         ☑ 题的传送门:

                       前k个高频单词


     这道题呢就比较难了,看到这个 “前k个” 是不是想起了我们以前介绍过的 Top-k 问题,我们的这道题呢就是存在 Top-k 问题的 并且和 HashMap 联合一起做这道题,才可以,我们来看看如何做到的。

步骤:

1、先定义一个 HashMap 里面的 key-value 是 String-Integer ,我们的 Integer 用来记录对应的String出现了几次。

2、建立 小根堆 这里不是简单的存储 Integer 而是存储 HashMap 的底层的 Map.Entry<String,Integer>,根据这里的Integer 来进行比较的,但是这里呢要注意的是,当不同的单词出现的次数相同的时候呢,我们根据 字典的顺序进行存储,所以这里的 创建小根堆 是要传一个新的比较器的

3、每次去 map 的数据,先把 堆的长度 和 k进行比较:

  如果:堆的长度  < k 的话,就直接入堆

  如果:堆的长度 >= k 的话,我们还需要判断:

             如果:堆顶数据的value值 < map的 value 值的话,说明map对应的 key 出现的次数多,                          就把 堆顶的数据进行出堆,并且把 map的这个数据 入堆。

             如果:堆顶数据的value值 == map的 value 值的话。我们就要判断对应的 key 的大小了

                        如果:堆顶数据的key 值 > map的 key 值的话,我们就把堆顶数据 出堆,并且把                                     map 的数据进行 入堆。

4、我们创建一个 ArrayList 的集合,把 堆中的 k 个 String 都放到 ArrayList 中,这个时候还是存在问题的,这时 ArrayList 中存放的是从小到大的排序,我们要把其 翻转过来。

5、对其 ArrayList 进行翻转。

这个呢就是这道题的大体思路了,我们来看看如何进行编写的代码:

 


 ❄️总java基础421例题结:

    OK,这次关于我们的 哈希表 相关的练习题呢,到这里就结束了,让我们下次再见,下次呢我们就要进入新的知识章节了,让我们尽情期待吧!!!拜拜~~~

小讯
上一篇 2024-12-29 10:03
下一篇 2024-12-31 08:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/8441.html