数组、队列、栈、链表
数组、队列、栈线性结构相关的题目
花千树hss
这个作者很懒,什么都没留下…
展开
-
并查集及其java实现
并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,⋯,Sk}S=\lbrace{S_1,S_2,⋯,S_k\rbrace}S={S1,S2,⋯,Sk},一般都会使用一个整数表示集合中的一个元素。每个集合可能包含一个或多个元素,并选出集转载 2020-05-12 10:46:18 · 310 阅读 · 0 评论 -
设计RandomPool结构
题目描述设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom(): 等概率随机返回结构中的任何一个key。要求:Insert、delete和getRandom方法的时间复杂度都是 O(1)。思路维护两个hashmap,一个存放<key,Integer>,一个存放 <key,Integer>size记录当前有多少个key插入时在两个map中同原创 2020-05-11 17:30:55 · 112 阅读 · 0 评论 -
两个单链表相交的一系列问题
问题描述在本题中,单链表可能有环,也可能无环。给定两个单链表的头节点 head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null 即可。 要求:如果链表1 的长度为N,链表2的长度为M,时间复杂度请达到 O(N+M),额外空间复杂度请达到O(1)。...原创 2020-05-06 15:39:59 · 119 阅读 · 0 评论 -
复制含有随机指针节点的链表
题目描述一种特殊的链表节点类描述如下:public class Node { public int value; public Node next; public Node rand; public Node(int data) { this.value = data; }} Node类中的value是节点值,next指针和正常单链表中next指针的意义一样,都指向下一个节...原创 2020-04-29 18:08:26 · 81 阅读 · 0 评论 -
将单向链表按某值划分成左边小、中间相等、右边大的形式
题目描述给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot 的节点,中间部分都是值等于pivot的节点,右部分都是值大于 pivot的节点。 除这个要求外,对调整后的节点顺序没有更多的要求。 例如:链表9->0->4->5->1,pivot=3。 调整后链表可以是1->0-...原创 2020-04-29 16:47:27 · 159 阅读 · 0 评论 -
判断一个链表是否为回文结构
题目描述给定一个链表的头节点head,请判断该链表是否为回文结构。例如: 1->2->1,返回true。1->2->2->1,返回true。15->6->15,返回true。1->2->3,返回false。进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。思路链表相关的问题,笔试时尽快做出来即可,空间...原创 2020-04-29 15:37:46 · 453 阅读 · 0 评论 -
打印两个有序链表的公共部分
题目描述给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。思路类似于快速排序的merge方法。代码public class PrintCommonPart { public static class Node{ public int val; public Node next; public Node(int...原创 2020-04-28 10:35:32 · 92 阅读 · 0 评论 -
在行列都排好序的矩阵中找数
题目描述给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一列都是排好序的。实现一个函数,判断K 是否在matrix中。 例如:0 1 2 52 3 4 74 4 4 85 7 7 9如果K为7,返回true;如果K为6,返回false。要求:时间复杂度为O(N+M),额外空间复杂度为O(1)。思路从矩阵的右上角或者左下角开始寻找,当从右上角开始寻找时...原创 2020-04-28 10:24:20 · 168 阅读 · 0 评论 -
“之”字形打印矩阵
题目描述给定一个矩阵matrix,按照“之”字形的方式打印这 个矩阵,例如:1 2 3 45 6 7 89 10 11 12“之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11, 8,12要求: 额外空间复杂度为O(1)。思路这题也应使用宏观结构的思想,不要局限与下标要怎么变。首先给两个点A、B,初始位置都在0,0点。A向右移动,B向左移动,每...原创 2020-04-27 17:38:22 · 657 阅读 · 0 评论 -
旋转正方形矩阵
题目描述给定一个整型正方形矩阵matrix,请把该矩阵调整成顺时针旋转90度的样子。要求: 额外空间复杂度为O(1)。思路从外圈开始,每一圈各自旋转90度,每一圈左上角和右下角的点的坐标可以确定,通过改变左上角和右下角的点缩小正方形。代码public static void rotate(int[][] matrix){ int tR=0; int tC=0; ...原创 2020-04-27 16:27:45 · 238 阅读 · 0 评论 -
转圈打印矩阵
题目描述给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如:1 2 3 45 6 7 89 10 11 1213 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11,10要求:额外空间复杂度为O(1)。思路按圈打印,给定左上角点的坐标和右下角点的坐标,顺时针打印一圈,然后左上角的点往右下方走一个,右下角的点往左上方走一个...原创 2020-04-24 12:17:48 · 144 阅读 · 0 评论 -
猫狗队列问题
题目描述宠物、狗和猫的类如下:public class Pet { private String type; public Pet(String type) { this.type = type; } public String getPetType() { return this.type; } }public class Dog extends Pet { ...原创 2020-04-24 10:30:17 · 102 阅读 · 0 评论 -
用队列实现栈;用栈实现队列
图的广度优先遍历需要用到栈,但有时题目会要求你不能使用栈,这是就需要用两个队列实现栈,然后用这个栈来实现图的广度优先遍历。用两个队列实现栈的基本思路:数据push时只进data队列;数据pop时先将data中的数据倒入help队列中,留最后一个在data队列中,然后返回给用户,最后data和help队列的指针交换一下;数据peek时方法和pop一样,只是peek的数据还需要入help队列...原创 2020-04-22 20:41:52 · 78 阅读 · 0 评论 -
在实现栈的基本功能的基础上, 再实现返回栈中最小元素的操作
实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返回栈中最小元素的操作。【要求】1. pop、push、getMin操作的时间复杂度都是O(1)。2. 设计的栈类型可以使用现成的栈结构。思路:同时维护两个栈结构,一个栈就是正常的栈,另一个栈放当前的最小值,和第一个栈同步操作。package LinearStructure;import java.util.Stack;pu...原创 2020-04-22 19:45:07 · 199 阅读 · 0 评论 -
用数组结构实现大小固定的队列和栈
public class Array_To_Stack_Queue { //使用数组结构实现栈 public static class ArrayStack{ private Integer[] arr; private int size; public ArrayStack(int initSize){ ...原创 2020-04-22 19:21:34 · 109 阅读 · 0 评论