数据结构
文章平均质量分 68
coolgwayne
这个作者很懒,什么都没留下…
展开
-
厚积薄发打卡Day112:堆栈实践(二)<汉诺塔问题:树形分析>
汉诺塔问题图解+树形分析原创 2023-01-05 16:55:39 · 643 阅读 · 0 评论 -
厚积薄发打卡Day111:堆栈实践(一)<数组模拟堆栈、链表模拟堆栈、洗牌与发牌的过程>
堆栈实践(一)原创 2023-01-01 23:30:36 · 316 阅读 · 0 评论 -
厚积薄发打卡Day104:链表(二)<链表中的环的入口节点>
链表中的环的入口节点如果一个链表中包含换,那么应该如何找出环的入口节点?LeetCode题目:给定一个链表,若其中包含环,请找出该链表的环的入口节点,否则,输出null。如上图,环的入口节点为3思路野路子:如果想要实现循环链表,那么必定在单链表的最后重新添加一个原有的节点,那么可以借助set结构对节点进行遍历去重,得到重复的节点就是为环的入口节点真是平平无奇小天才正式解题:借助上题思路(厚积薄发打卡Day103:链表(一)<删除倒数第k个节点>)可以借助快慢双指针的方法来解原创 2021-12-06 10:31:16 · 127 阅读 · 0 评论 -
厚积薄发打卡Day103:链表(一)<删除倒数第k个节点>
删除节点题目:如果给定一个链表,请问如何删除链表中的倒数第K个节点?假设链表中的节点总数为N,那么1≤K≤N。要求只能遍历链表一次举例:输入如下链表a,删除倒数第2个节点之后得到链表b链表a: 1-->2-->3-->4-->5-->6链表b: 1-->2-->3-->4-->6思路如果可以遍历两次,那么这个问题就会变得简单不少:第一次遍历获取链表总结点数n(题目为例:n = 6)第二次遍历直接找出链表的第n-k个节原创 2021-11-30 14:14:00 · 622 阅读 · 0 评论 -
厚积薄发打卡Day102:哈希表(七)<最小时间差>
最小时间差给定一组范围在00:00至23:59的时间,求任意两个时间之间的最小时间差。例如,输入时间数组[“23:50”,“23:59”,“00:00”],"23:59"和"00:00"之间只有1分钟的间隔,是最小的时间差。思路题目中要求求分钟的最小时间差,计算得出一天有24*60 = 1440min,因此可以创建一个长度为1440的数组容器当作映射表,并把字符串时间存入数组中:数组下标:一天的分钟数数组的值:是否出现了这个时间接下来只要遍历容器,比较数组值为true的下标,求最小值原创 2021-11-14 23:06:21 · 289 阅读 · 0 评论 -
厚积薄发打卡Day101:哈希表(六)<外星语言是否排序>
外星语言是否排序有一门外星语言,它的字母表刚好包含所有的英文小写字母,只是字母表的顺序不同。给定一组单词和字母表顺序,请判断这些单词是否按照字母表的顺序排序。例如,输入一组单词[“offer”,“is”,“coming”],以及字母表顺序"zyxwvutsrqponmlkjihgfedcba",由于字母’o’在字母表中位于’i’的前面,因此单词"offer"排在"is"的前面;同样,由于字母’i’在字母表中位于’c’的前面,因此单词"is"排在"coming"的前面。因此,这一组单词是按照字母表顺原创 2021-11-14 22:38:03 · 151 阅读 · 0 评论 -
厚积薄发打卡Day100:哈希表(五)<变位词组>
变位词组给定一组单词,请将它们按照变位词分组。例如,输入一组单词[“eat”,“tea”,“tan”,“ate”,“nat”,“bat”],这组单词可以分成3组,分别是[“eat”,“tea”,“ate”]、[“tan”,“nat”]和[“bat”]。假设单词中只包含英文小写字母。思路1:数字映射题目中假设单词中只包含英文小写字母,因此可以创建数组来保存每个词组的单词:用质数映射到对应的26个单词用乘法运算保证每个词组拥有单词成分的唯一性最后用词组内的每个单词的映射质数乘积当key,v原创 2021-11-14 00:34:34 · 634 阅读 · 0 评论 -
厚积薄发打卡Day99:哈希表(四)<有效的变位词>
有效的变位词给定两个字符串s和t,请判断它们是不是一组变位词:在一组变位词中,它们中的字符及每个字符出现的次数都相同,但字符的顺序不能相同。例如,"anagram"和"nagaram"就是一组变位词。思路针对变位词的解析可以移步上一小节:关于变位词的解析:厚积薄发打卡Day98:哈希表(三)<字符串变位词>由于变位词与字符出现的次数相关,因此可以用一个哈希表来储存字符出现的次数:哈希表<字符,字符出现的次数>实现数组如果只考虑小写英文字母,则可以用数组模拟哈希表小写原创 2021-11-12 00:57:19 · 686 阅读 · 0 评论 -
厚积薄发打卡Day98:哈希表(三)<字符串变位词>
变位词变位词是与字符串相关算法题经常出现的概念,所谓变位词是指组成各个单词的字母及每个字母出现的次数完全相同,只是字母排列顺序不同。例如:“pots”,“stop”,“tops” 就是一组变位词.字符中的变位词输入字符串s1和s2,如何判断字符串s2中是否包含字符串s1的某个变位词?如果字符串s2中包含字符串s1的某个变位词,则字符串s1至少有一个变位词是字符串s2的子字符串。假设两个字符串中只包含英文小写字母。例如,字符串s1为"ac",字符串s2为 “decaf”,由于字符串s2中包含字符串原创 2021-11-11 00:39:08 · 473 阅读 · 0 评论 -
厚积薄发打卡Day97:哈希表(二)< 实现LRU缓存 >
题目二:请设计实现一个最近最少使用( Least Recently Used,LRU)缓存,要求如下两个操作的时间复杂度都是O(1):get(key):如果缓存中存在键key,则返回它对应的值;否则返回-1put( key, value):如果缓存中之前包含键key,则它的值设为 value;否则添加键key及对应的值 value。在添加一个键时,如果缓存容量已经满了,则在添加新键之前删除最近最少使用的键(缓存中最长时间没有被使用过的元素)。思路:先来翻译翻译题目的意思:假设这里原创 2021-11-08 00:55:48 · 290 阅读 · 0 评论 -
厚积薄发打卡Day96:哈希表(一)< 实现查删插为O(1)的容器 >
哈希表:哈希表是一种常见的数据结构,其最大有点是高效,在哈希表的插入、删除或查找元素的时候只需要O(1)的时间,因此哈希表常被用来优化时间效率。在Java中,哈希表有两个对应的类型,即HashSet和HashMap:HashMap:映射关系结构:数组+链表+红黑树(1.8+)key为set结构:不可重复value为collection结构:可重复HashSet:集合结构:HashMap的key题目一:设计一个数据结构,使得如下三个操作的时间复杂原创 2021-11-07 23:14:48 · 127 阅读 · 0 评论 -
厚积薄发打卡Day95: 排序算法之映射排序<桶排序>
厚积薄发打卡Day93: 排序算法之循环不变式<插入、选择、冒泡>厚积薄发打卡Day94: 排序算法之分治策略<归并、快排>桶排序概念:参考:桶排序桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。桶的结构:List<LinkedList<Integer>>,也就是Hash结构,是一种映射Hashmap的储存也是用到了桶结构:在将数据放到桶中之后,再通过一定的算法,将桶中的数据提出来,并转换成有序数组。就得到我们.原创 2021-10-31 23:21:01 · 404 阅读 · 0 评论 -
厚积薄发打卡Day94: 排序算法之分治策略<归并、快排>
厚积薄发打卡Day93: 排序算法之循环不变式<插入、选择、冒泡>分治策略分而治之(Divide And Conquer):将一个大问题化解成无数个相同的小问题进行求解,也就是递归的运用。排序的分治策略:将集合A不断拆分成相同的小集合,最后逐一返回合并得解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xWKr1Uh-1635693287652)(重温经典的排序算法.assets/image-20211031204640261.png)]重点:必须强调终止条.原创 2021-10-31 23:17:42 · 149 阅读 · 0 评论 -
厚积薄发打卡Day93: 排序算法之循环不变式<插入、选择、冒泡>
前置:为了后续测试方便,定义了IMutableSorter和IImutableSorter两种接口IMutableSorter :不改变原来集合IImutableSorter:返回一个新的集合测试类,可通过反射测试对应的排序public class MySortTest { public void sortTest(Class clazz, int N) { try { Constructor constructor = clazz.ge原创 2021-10-31 23:13:00 · 391 阅读 · 0 评论 -
剑指offer打卡Day22:数字在升序数组中出现的次数<从 BinarySearch 到 util.Arrays>
题目描述统计一个数字在升序数组中出现的次数。示例1输入[1,2,3,3,3,3,4,5],3返回值4解析:乍一看题目,哟吼老套路了,直接上个计数器不就完事了?但是突然想到上次做题出现的数组越界(详见 Day14中的解析)???? 得冷静一下暴力解题最简单粗暴的解决方法,遍历+计数public int GetNumberOfK(int [] array , int k) { int count = 0; for(int i = 0; i<=array.l原创 2021-02-19 15:40:06 · 212 阅读 · 0 评论 -
剑指offer打卡Day13:孩子们的游戏
题1:圆圈中最后剩下的数题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)原创 2021-01-14 19:25:28 · 183 阅读 · 2 评论 -
剑指offer打卡Day10:变态跳台阶
题1:变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。示例输入3返回值4解析:规律分析:台阶 : 跳法0 01 12 2 (1,2)3 4 (111,12,21,3)4 8 (11原创 2021-01-11 14:07:39 · 82 阅读 · 0 评论 -
剑指offer打卡Day09:跳台阶
题1:跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入1返回值1示例2输入4返回值5解析:规律总结:台阶 : 跳法0 01 12 2 (1,2)3 3 (111,12,21)4原创 2021-01-11 00:00:08 · 115 阅读 · 0 评论 -
剑指offer打卡Day_08:连续子数组的最大和
题1:连续子数组的最大和题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例输入[1,-2,3,10,-4,7,2,-5]返回值18说明输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。 解析:首次看到这题时,没有注意到对 时间复杂度 的要求,立刻想到要用暴力循环的方法来求解对于数组,是求其连原创 2021-01-10 17:17:58 · 174 阅读 · 0 评论 -
剑指offer打卡day07:第一个只出现一次的字符
题1:第一个只出现一次的字符题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例输入"google"返回值4解析:遍历计数:对于计数问题可以用传统的count++计数,但是这样效率太低,因此可以创建数组当计数器index 保存元素, value 保存次数牛客网剑指offer算法题打卡——day04 中的用数组优化求斐波那契数原创 2021-01-07 20:37:15 · 83 阅读 · 0 评论 -
剑指offer打卡day06:两个链表的第一个公共节点
题1:两个链表的第一个公共节点题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)说明:本题目包含复杂数据结构ListNode,点此查看相关信息解析:参考:剑指Offer面试题:31.两个链表的第一个公共节点牛客网:廿半针对两个链表,主要存在长度差的变量,可以运用双指针法,来统一两个链表的长度。双指针法:创建两个指针p1和p2,分别指向两个链表的头结点,然后依次往后遍历。如果某个指针到达末尾原创 2021-01-06 21:31:13 · 114 阅读 · 0 评论 -
剑指offer打卡day05:二维数组中的查找
题1:二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例输入7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返回值true解析:二维数组:二维数组其实是一位数组的嵌套(每一行看做一个内层的一维数组)可类似看作行和列的关系,可当作数学概念中的矩阵看待原创 2021-01-05 19:54:59 · 151 阅读 · 0 评论 -
剑指offer打卡day04:平衡二叉树&斐波那契数列
题1:平衡二叉树题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。示例输入{1,2,3,4,5,6,7}返回值true说明:本题目包含复杂数据结构TreeNode,点此查看相关信息定义TreeNode:public class TreeNode {原创 2021-01-04 20:54:29 · 612 阅读 · 1 评论 -
剑指offer打卡day03:二叉搜索树与双向链表 & 扑克牌顺子
题1:二叉搜索树与双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。说明:本题目包含复杂数据结构TreeNode,点此查看相关信息解析:双向链表:在没有特指的情况下说链表一般指代“单向链表”,只能进行单项遍历,万一不行其中有一个链接断裂,那么后面的链表数据就无法复原了。双向链表(Double LinkedList)在一个节点有两个指针变量,一个指向后面节点,一个指向前面的节点,可以双向通行。优缺点:优原创 2021-01-02 17:34:23 · 258 阅读 · 0 评论 -
树型数据结构:二分搜索树(BST)及其遍历
二分搜索树为什么要有树结构?将数据使用树结构存储后,对数据的使用变得出奇的高效对于常用的树形数据结构:二分搜索树(Binary Search Tree)平衡⼆二叉树:AVL;红⿊黑树堆;并查集线段树;Trie (字典树,前缀树)二叉树的相关定义与性质:和链表一样,是一种动态数据结构class Node{ E e; Node left; Node right}二叉树具有唯一根节点每个节点最多有两个孩子(left–左孩子,right–右翻译 2020-10-18 16:05:35 · 243 阅读 · 0 评论 -
LeetCode:203. 移除链表元素--从链表到递归的学习
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * }.原创 2020-06-10 16:03:52 · 181 阅读 · 0 评论 -
《玩转数据结构》--链表笔记
慕课网《玩转数据结构》–链表在线性数据结构中,如:动态数组 -----|栈 ------|---------->都在底层依托静态数组:靠resize解决固定容量问题队列 -----|链表 -------------------->真正动态的数据数据结构为什么链表很重要?链表为真正动态的数据结构最简单的动态数据结构更深入的理解引用(或者指针)更深入理解递归辅助组成其他数据结构链表Linked List数据储存翻译 2020-06-08 17:44:08 · 205 阅读 · 0 评论