![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 60
此部分为面试中常见且重要的知识点,我会用非常有趣易懂的方式带领大家一块学习,欢迎大家订阅哦~
春风~十一载
沐浴阳光,一路向北~
展开
-
【Java之基础】简述hashcode和equals的区别
简述hashcode和equals的区别如果在hashmap当中来说的话,作用分别如下:hashcode是定位当前元素,需要找到某个元素在当前数组(桶)当中的下标equals是需要在hashcode定位的某个下标(桶)中遍历链表,比较哪个key是相同的。举个例子,如果我们要在字典中查找“美丽”这个词语,我们应该先找到“美”在哪个地方,那么实际上我们找“美”的过程就可以理解成hashcode。查找“美”字后,由于“美”后面(下标)有很多字可以组成词语,例如“美人”、“美景”等等。但我们需要找到的原创 2022-02-12 10:53:33 · 931 阅读 · 7 评论 -
【数据结构】实现一个哈希表,使用哈希桶方式解决哈希冲突
一. 实现形式一(键值对只能为整数)我们可以先实现一个比较简单的哈希表,使用java中解决哈希冲突的方法,即哈希桶(开散列)方式实现,其中注意:可以使用内部类方式定义节点负载因子默认为0.75因为我们使用的是哈希桶方式解决哈希冲突,所以在我们扩容成功之后,原来桶中的数据得重新哈希计算出新的位置,不然就和原来桶中的数据的位置不一样了相关代码如下public class HashBucket { static class Node {//使用内部类方式定义节点 publ原创 2022-02-12 09:51:24 · 656 阅读 · 1 评论 -
【力扣387】字符串中的第一个唯一字符
题目描述:给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。示例 1:输入: s = “leetcode”输出: 0示例 2:输入: s = “loveleetcode”输出: 2示例 3:输入: s = “aabb”输出: -1提示:1 <= s.length <= 105s 只包含小写字母解题思路一:我们可以定义一个map集合,key为字符,value为出现的次数,遍历字符串,把每一个字符依次往里.原创 2022-02-11 11:11:59 · 361 阅读 · 4 评论 -
【力扣692】前K个高频单词
题目描述:给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。示例 2:输入: [“the”, “day”, “i.原创 2022-02-10 23:20:35 · 7167 阅读 · 9 评论 -
【牛客网】旧键盘
题目描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。链接:https://www.nowcoder.com/questionTerminal/f88dafac00c8431fa363cd85a37c2d5e来源:牛客网输入描述:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题.原创 2022-02-10 16:23:41 · 351 阅读 · 11 评论 -
【力扣771】宝石与石头
题目描述:给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。字母区分大小写,因此 “a” 和 “A” 是不同类型的石头。示例 1:输入:jewels = “aA”, stones = “aAAbbbb”输出:3示例 2:输入:jewels = “z”, stones = “ZZ”输出:0提示:1 <= jewels.length, .原创 2022-02-09 15:51:50 · 1471 阅读 · 34 评论 -
【力扣138】复制带随机指针的链表
题目描述:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y .原创 2022-02-08 18:35:25 · 679 阅读 · 29 评论 -
【力扣136】只出现一次的数字
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题目链接解题思路一:此题我们可以利用位运算把这个数组里的所有元素异或起来,最终的结果即为我们想要的数字class Solution { public int singleNumber(int[].原创 2022-02-07 17:36:22 · 464 阅读 · 11 评论 -
【算法】有10万条数据,打印出每个数据/重复的数据出现的次数
一. 有10万条数据,打印出每个数据出现的次数思路:此题有一个前提条件,即存储的数据和出现的次数不能为空,因此,我们可以用map集合类,用key来表示数据,用value来表示该数据出现的次数,当value为null时,表示该数据还没有出现过,我们往map里面存即可,如果当value的值不为null时,表示该数据至少出现过一次,我们将value的值+1就行。相关代码如下:import java.util.ArrayList;import java.util.HashMap;import java.u原创 2022-02-06 16:39:24 · 1353 阅读 · 19 评论 -
【算法】有10万条数据,去除所有重复的数据并打印出来
题目:有10万条(比较多)的数据,去除所有重复的数据并打印出来思路:在一看到这么多数据时,可能有些人会比较慌,想了好久可能会想到先把这么多数据存在一个链表里,然后逐个遍历,遇到重复的数据标记出来,最后再删除并打印出来。其实没有必要那么复杂,有时候做不出来题目的最主要的因素就是把题目想复杂了,只需要利用set这个集合不能存储重复的元素特性即可做出。代码示例如下import java.util.ArrayList;import java.util.HashSet;import java.util.原创 2022-02-06 16:02:36 · 1039 阅读 · 10 评论 -
【算法】冒泡排序相关知识点总结
冒泡排序冒牌排序定义冒泡排序的代码改进方案模拟实现qsort函数冒牌排序定义什么是冒泡排序?用官方的定义来说就是:冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。冒泡排序的代码//对一个整形数组进行冒泡排序的//void print_arr(int arr[], int sz){ int i = 0原创 2021-02-22 21:42:43 · 399 阅读 · 0 评论 -
【算法】让你秒懂二分查找法(折半查找)
目录二分查找的定义及优势二分查找的适用条件实例讲解改进方法二分查找的定义及优势什么是二分查找法?其实很容易理解,就拿生活中的实例来说吧,假设你的一位朋友让你去猜他刚买的一个东西的价钱,你朋友说这个东西的价格不大于100元,那么你会怎么去猜?你肯定不会从1元开始猜吧?对的!那样太慢了,而且工作量很大,效率也会比较低。那么我们如果从50元开始去猜,下次根据你朋友的提示,如果你猜大了,那么下次就去猜25,就这样一半一半的猜法,是很容易会找到答案的这种方法就叫二分查找法,也叫折半查找方法,它的优势显而易见,它原创 2021-02-10 11:54:53 · 533 阅读 · 0 评论 -
【数据结构】优先级队列(堆)全面讲解
兄弟们,好久不见!!!相信你们一定想我了,没错,我也想你们了,作为补偿,接下来要给大家带来更好更易懂的内容,一起交流一起进步鸭!老铁们可以互关哦!那么让我们出发吧!优先级队列什么是堆?堆的基本概念与性质基本概念下标关系作用创建堆的方法具体实现思路及代码时间复杂度分析(重难点)堆的应用概念原理入队列什么是堆?优先级队列是一个类,即PriorityQueue,其底层最主要的是继承了AbstractQueue,而AbstractQueue又实现了Queue接口优先级队列往往用堆来实现,堆,也即原创 2021-08-25 20:58:31 · 1498 阅读 · 33 评论 -
【算法】常见排序算法总结
排序排序的基本概念定义算法稳定性应用常见的基于比较类的排序插入排序原理实现排序性能分析排序的基本概念定义排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。注意:1.平时上下文中所提到的排序,默认指的是排升序,而非降序2原创 2021-09-05 12:57:01 · 3588 阅读 · 90 评论