
算法数据结构
文章平均质量分 84
基本数据结构和常用算法
咸鱼吐泡泡
这个作者很懒,什么都没留下…
展开
-
一些算法日常题
2.遍历数组,判断哈希表中是否包含与i处位置的元素,包含且i减去该元素所对应的下标小于等于k时就返回true,即map.containsKey(nums[i]&&i-map.get(nums[i])).当不满住条件时将下标i处的数据记录到哈希表中。2.判断j-i的差值length与K的大小关系,若length>k,则将集合中下标为i处的元素删除,同时i右移。若不大于,则让j右移,右移之前先判断集合中是否存在j处下标的元素,若存在则返回true,不存在则将j处下表的元素加入集合中。类型滑动窗口、哈希表。...原创 2022-08-19 10:22:32 · 189 阅读 · 0 评论 -
七大排序算法
排序:排序就是对某项数据按照特定的要求,比如大小或字符长短等按照升序或降序排序。排序过程中设计稳定性,稳定性指的是若有两个相同的数字,比如1和1。如果排序前1在1的前面,排完序后1还在1的前面。那么就说这个排序算法是稳定的,相反则说明不稳定。注意:如果本身就是一个稳定的排序,可以将其变成不稳定排序;如果本身就是不稳定排序,不能变成稳定的排序。常见的排序方法 上面是基于比较的排序。下面一个一个的分析一:直接插入排序 直接插入排序指的是将新的数据插入在已经排好序的序列中。比如我们生活中的玩的斗地主,我们需要将新原创 2022-06-28 15:30:50 · 18521 阅读 · 9 评论 -
二维集合List<List<Object>>
同数组一样,集合也有二维的,其实这样说不准确。以List为例,外层List集合中的元素类型是List、内层List集合中元素类型是Integer。1.二维集合的初始化2.二维集合添加数据3.二维集合的遍历讲解一个例题1260. 二维网格迁移 - 力扣(LeetCode) 结果...原创 2022-06-15 16:16:38 · 3330 阅读 · 0 评论 -
Map和Set
Map和Set是集合中的两个接口,Set实现了Collection接口,而Map没有实现。Map下面又有很多子类,我们主要研究HashMap和TreeMap;Set同样有很多子类,主要研究HashSet和TreeSet。在理解掌握它们之前,我们要先研究二叉搜索树(又叫二叉排序树),因为TreeMap、TreeSet底层是红黑树,红黑树是一种特殊的二叉搜索树,HashSet、HashMap底层是哈希表,哈希表中也涉及到了红黑树。一:二叉搜索树二叉搜索树又叫二叉排序树,它可以是空树,具有以下性质:(1)若它的左原创 2022-07-04 18:05:53 · 685 阅读 · 0 评论 -
栈和队列的模拟实现和相关的试题
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除的一端称为栈的顶,另一端称为的栈的底。栈中元素遵循后入先出的原则。栈的常用方法:Stack() 构造一个空栈push(e) 将e压入栈,并返回epop() 将栈顶元素出栈并返回peek() 获取栈顶元素size() 获取栈中有效元素个数empty() 检测栈是否为空下面用数组模拟构造一个栈 int[原创 2022-05-16 10:40:18 · 238 阅读 · 0 评论 -
优先级队列和堆
优先级队列:返回最高优先级对象、添加新的对象堆:将一个给定的集合或数组里面的元素按照完全二叉树层序遍历的顺序存储在一个一维数组中堆的存储方式:大根堆、小根堆大根堆:每个节点都大于左右子节点小根堆:每个节点都小于左右子节点模拟实现优先级队列(堆)的创建:思路:堆的向下调整1.从最后一科子树开始调整2.每颗子树调整的时候都是向下调整主要解决问题:(1)确定最后一课子树的根节点p = [(len-1)-1]/2(2)p--(3)堆向下调整,确保左右子节点<l.原创 2022-06-21 22:05:55 · 1074 阅读 · 0 评论 -
时间复杂度与空间复杂度
时间复杂度时间复杂度和空间复杂度是我们用来衡量算法好坏的一种评判标准,就像日常生活中学习考试一样,同样是考试,如果你取得高分,就说明你学的好或者说应是技巧好。而这里时间复杂度越低就说明算法也好,当然这个还要结合空间复杂度来讨论,也就是消耗的资源情况。我们定义或者说是计算时间复杂度的方法如下(用大O渐进表示法):1.用常数1取代运行时间中的所有加法常数eg:运行次数N=100,它的时间复杂度就是O(1)2.运行次数函数中,只保留最高项eg:运行次数F(N)=N^2+2*N+1000,它原创 2022-04-22 19:24:00 · 748 阅读 · 0 评论 -
二叉树及相关面试题
树的概念:树是一种非线性的数据结构,它有n个有限节点组成一个具有层次关系的集合。树的相关概念:节点的度:一个节点含有子树的个数称为该节点的度;如上图:A的度为6.树的度:一棵树中,所有节点的度最大值称为树的度;如上图:树的度为6.叶子结点或终端节点:度为0的节点称为叶子结点;如上图:B、C、H、I、P...如果一个节点有子节点,则这个节点称为这个子节点的父节点或双亲节点孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;如上图:B是A的孩子节点根节点:一棵树中,没原创 2022-06-17 10:59:53 · 582 阅读 · 0 评论 -
链表题解(上)
1.给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)示例:给定一个链表:1->2->3->4->5,和n = 2。当删除了倒数第二个节点后,链表为1->2->3->5说明:题目保证给的n是一个有效的数据方法一:暴力求解(1)求得链表的长度(2)删除丛链表头数起的第(L-n+1)个节点方法二:快慢指针法识别的方法:1.涉及链表的特殊位置,考虑快慢指针;2.要..原创 2022-08-19 09:16:50 · 263 阅读 · 0 评论 -
创建无头双链表并实现增删改查
双链表 有三个属性,一个数值,一个next域,一个prev域。在构造时只需要传递一个数值即可。双链表还有头head和尾lastpublic class DoubleLinkedlist { static class ListNode{ public Integer val; public ListNode prev; public ListNode next; public ListNode(Integer val) {原创 2022-05-18 10:35:05 · 265 阅读 · 0 评论 -
无头结点的单链表的实现
链表是基于顺序表之后的一种更加高效的数据结构,他能够有效的增删改查,比顺序表的效率提高了很多。下面我们来实现这一数据结构。不光是实现,我们还需要通过几个功能来加深大家对链表的理解,这列功能包括链表中的节点我们都设置在一个Linkedlist类里面public class Linkedlist {}然后让主类来实现它Linkedlist类里面的方法public class MyLinkedlist { public static void main(String[] args)原创 2022-05-09 23:47:46 · 4013 阅读 · 1 评论 -
ArrayList和ArrayList的模拟实现
ArrayList是集合中的一种重要数据结构,是线性表中的一种,它的底层是一个动态变化的数组。1.ArrayList的构造:无参构造——ArrayList()利用其他Collection构建ArrayList——ArrayList(Collection原创 2022-06-15 13:19:46 · 300 阅读 · 0 评论 -
数据结构介绍
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定的数据元素的集合。这里的结构就是指数据元素之间存在的关系,分为逻辑结构和存储结构。 数据结构分类大体分为两类,包括包括线性结构和非线性结构1)线性结构作为最常用的数据结构,其特点就是数据元素之间存在一对一的线性关系2)线性结构有两种不同的存储结构:顺序结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。3)链式存储的线性表称为链表,链表中存储元素不一定是连续的,元素节点中存放数据原创 2022-06-17 11:02:09 · 1568 阅读 · 0 评论