
数据结构与算法(Java版)
文章平均质量分 58
ZZZhonngger
一只有女朋友的程序猿
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
再探滑动窗口:【存在重复元素 II】
题目给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。解题思路维护一个哈希表,用来模拟滑动窗口,里面始终最多包含 k 个元素,滑动窗口的大小为k,当出现重复值时则说明在 k 距离内存在重复元素每次遍历一个元素则将其加入哈希表中,如果哈希表的大小大于 k,则移除最前面的数字,滑动窗口滑动时间复杂度:O(n)代码实现 public boolean containsNearbyDuplic原创 2021-08-07 21:34:14 · 215 阅读 · 0 评论 -
初识滑动窗口:【643. 子数组最大平均数 I】
滑动窗口指的是这样一类问题的求解方法,在数组上通过双指针同向移动而解决的一类问题。其实这样的问题我们可以不必为它们专门命名一个名字,它们的解法其实是很自然的。使用滑动窗口解决的问题通常是暴力解法的优化,掌握这一类问题最好的办法就是练习,然后思考清楚为什么可以使用滑动窗口。题目子数组最大平均数 I给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。例如:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50).原创 2021-08-07 19:05:19 · 215 阅读 · 0 评论 -
圆圈中最后剩下的数字(Java实现)
圆圈中最后剩下的数字(Java实现)题目:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例:输入: n = 5, m = 3输出: 3有名的约瑟夫问题,利用ArrayL...原创 2020-03-30 21:20:15 · 367 阅读 · 0 评论 -
2020大厂面试必备——HashMap1.7和1.8源码解析
实习面试准备——Map1.HashMap(1)数据结构在JDK1.7中,HashMap中的数据结构是数组+单链表的组合;在JDK1.8中的HashMap存储结构是由数组、链表、红黑树这三种数据结构形成。(2)JDK1.7中HashMap源码分析(2.1)首先看一张图片:这张图片非常清晰直观地表示了HashMap底层的数据结构,即数组+链表。(2.2)实现原理成员变量: /** ...原创 2020-03-27 17:54:14 · 351 阅读 · 0 评论 -
2019招商银行信用卡中心秋招IT笔试编程题总结
2019招商银行信用卡中心秋招IT笔试编程题总结1.给定一个字符串来代表一个员工的考勤纪录,这个纪录仅包含以下两个字符:‘A’ : Absent,缺勤‘P’ : Present,到场如果一个员工的考勤纪录中不超过两个’A’(缺勤),那么这个员工会被奖赏。如果你作为一个员工,想在连续N天的考勤周期中获得奖赏,请问有多少种考勤的组合能够满足要求解答:该题其实就是组合问题,可以归结为下面的...原创 2020-03-27 11:20:42 · 1325 阅读 · 0 评论 -
二分查找(分治法Java实现)
二分查找(分治法Java实现)package Day52;/** * @Author Zhongger * @Description 分治递归查找 * @Date 2020.3.26 */public class BinarySearch { public static void main(String[] args) { BinarySearch sear...原创 2020-03-26 21:15:39 · 718 阅读 · 0 评论 -
最小路径和——动态规划求解(Java实现)
最小路径和——动态规划求解(Java实现)题目:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。这题和机器人走路的思路类似,就是状态方程有所不同,...原创 2020-03-24 18:57:12 · 833 阅读 · 0 评论 -
不同路径——动态规划求解(Java实现)
不同路径——动态规划求解(Java实现)题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -&...原创 2020-03-24 17:50:38 · 666 阅读 · 0 评论 -
青蛙跳台阶问题——动态规划求解(Java实现)
青蛙跳台阶问题——动态规划求解(Java实现)题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21提示:0 <= n <= 100一道比...原创 2020-03-24 16:46:34 · 653 阅读 · 0 评论 -
搜索插入位置(Java实现)
搜索插入位置(Java实现)给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6]...原创 2020-03-23 16:32:04 · 645 阅读 · 0 评论 -
实现 strStr()函数(Java实现)
实现 strStr()函数(Java实现)实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack =...原创 2020-03-23 14:44:19 · 960 阅读 · 0 评论 -
移除元素(Java实现)
移除元素(Java实现)题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且...原创 2020-03-23 14:23:55 · 833 阅读 · 0 评论 -
链表的中间结点(Java实现)
链表的中间结点(Java实现)题目:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.v...原创 2020-03-23 14:07:12 · 779 阅读 · 0 评论 -
删除排序数组中的重复项(Java实现)
删除排序数组中的重复项(Java实现)题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你...原创 2020-03-20 11:54:01 · 1067 阅读 · 0 评论 -
合并两个有序链表(Java实现)
合并两个有序链表(Java实现)题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解法一:常规解法package Day47;/** * @Author Zhongger * @Descript...原创 2020-03-20 11:26:35 · 1190 阅读 · 1 评论 -
有效的括号(Java实现)
有效的括号(Java实现)题目:给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: ...原创 2020-03-20 10:15:55 · 1124 阅读 · 0 评论 -
最小的k个数(Java实现)
最小的k个数(Java实现)题目:输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。package Day47;import java.util.Arrays;import java.util.PriorityQueue;import java.util.Queue;/** * @Author ...原创 2020-03-20 09:40:23 · 543 阅读 · 0 评论 -
最长公共前缀(Java实现)
最长公共前缀(Java实现)题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。官网的题解很巧妙,值得学...原创 2020-03-19 14:05:11 · 378 阅读 · 0 评论 -
罗马数字转整数(Java实现)
罗马数字转整数(Java实现)罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做...原创 2020-03-19 10:51:03 · 455 阅读 · 0 评论 -
最长回文串(Java实现)
最长回文串(Java实现)题目:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:"abccccdd"输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。我的思路是:利用HashMa...原创 2020-03-19 09:53:02 · 1593 阅读 · 0 评论 -
回文数(Java实现)
回文数(Java实现)题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不...原创 2020-03-18 22:55:36 · 617 阅读 · 0 评论 -
矩阵重叠(Java实现)
矩阵重叠(Java实现)题目:矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形,判断它们是否重叠并返回结果。示例 1:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]输出:tru...原创 2020-03-18 22:14:08 · 1007 阅读 · 1 评论 -
输入一棵二叉树,判断该二叉树是否是平衡二叉树(Java版)/输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。(Java版)
输入一棵二叉树,判断该二叉树是否是平衡二叉树(Java版)package Day45;/** * @Author Zhongger * @Description 输入一棵二叉树,判断该二叉树是否是平衡二叉树 * @Date 2020.3.18 */public class AVLSolutionClass { private boolean flag=false; ...原创 2020-03-18 09:49:46 · 215 阅读 · 0 评论 -
2020哔哩哔哩校招后端开发笔试编程题总结
2020哔哩哔哩校招后端开发笔试编程题总结1.给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9)暴力求解法:package Day44;/** * @Author Zhongger * @Description 给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9)...原创 2020-03-17 15:14:27 · 1514 阅读 · 0 评论 -
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。(Java语言实现)
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针(Java语言实现)这是剑指Offer的题目,我的思路是这样的,就是把中序遍历的节点依次添加进ArrayList中,然后遍历ArrayList,找到目标节点的下一个节点就可以返回了,下面是我思路的代码实现。package Day43;import java.u...原创 2020-03-15 20:18:49 · 475 阅读 · 0 评论 -
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)2020酷家乐笔试原题:用的是最简单的,暴力求解法。package Day43;/** * @Author Zhongger * @Description 给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。 * @Date 2020.3.15 */public class S...原创 2020-03-15 10:54:44 · 1415 阅读 · 0 评论 -
三叉树的垂直输出(Java实现)
三叉树的垂直输出(Java实现)这是2020酷家乐的笔试真题三叉树的结构如下图。要求:任选一种编程语言,实现功能。写函数,垂直输出元素值。输出的结果如下:A,B,D,A,C,G,A,C,K,代码实现,利用深度优先搜索和回溯法求解首先构建节点类class Node{ String value;//节点值,如果节点值为null,则其没有子节点 Node le...原创 2020-03-15 10:44:42 · 1027 阅读 · 0 评论 -
平衡二叉树(AVL)(Java实现)
平衡二叉树(AVL)(Java实现)1.二叉搜索树存在的问题虽然二叉树搜索在查询,删除,添加上具有一定的优势,但是在一些情况下的效率也特别低。比如下面的这个二叉搜索树:我们发现,它的右子树非常地高,这就失去了二叉树本来具备的高效查找的功能,它的查找效率甚至比链表还低,因为每遍历到一个节点时还要判断其是否有左子树或右子树。为了避免这种情况,就引入了平衡二叉树。2.平衡二叉树(AVL)的定义...原创 2020-03-14 13:05:40 · 271 阅读 · 0 评论 -
二叉排序树(Java实现)
二叉排序树(Java实现)1.二叉排序树的定义二叉排序树,又叫二叉查找树,如果非空,则具有以下性质:若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也分别为二叉排序树。由定义可得出 二叉排序树的一个重要性质: 中序遍历该二叉树可以得到一个结点值递增的有序序列。2.结点定义//二叉排序树的节点...原创 2020-03-13 14:20:14 · 2299 阅读 · 4 评论 -
两个链表的第一个公共节点(Java实现)
两个链表的第一个公共节点(Java实现)思路: 我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。这样,当它们相遇时,所指向的结点就是第一个公共结点。p...原创 2020-03-12 14:41:08 · 338 阅读 · 0 评论 -
替换空格(Java实现)
替换空格(Java实现)题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路: 考虑时间复杂度为O(n)的解法,搞定Offer就靠它了我们先遍历一次字符串,这样就能够统计出字符串中空格的综述,并可以计算出替换之后字符串的总的长度。每替换一个空格,长度增加2,因此替换以后的字符...原创 2020-03-11 20:29:58 · 916 阅读 · 0 评论 -
二维数组中的查找(Java实现)
二维数组中的查找(Java实现)题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。如在二维数组:1 2 8 92 4 9 124 7 10 136 8 11 15中,查找数字7,返回true;查找数字5,返回false.题解:首先,我们来谈一下最为直观的解,就...原创 2020-03-11 19:49:20 · 517 阅读 · 0 评论 -
单链表的基本操作(Java实现)
单链表的基本操作和一些经典的面试题总结(Java实现)1.单链表简介:线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。以“结点的序列”表示线性表称作线性链表(单...原创 2020-03-07 23:20:12 · 1564 阅读 · 0 评论 -
【数据结构】Java实现括号匹配问题
问题描述编写一个类,从标准输入中读取一串包含"(" “)” “[” “]” “{” "}"的字符串,并使用栈来判定其中的括号是否配对完整。例如 “[()]{}{[()()] ()}”程序应该打印true,对于 [(]) 则打印false.算法1.将字符串转换为字符数组chars2.利用for循环,将每一次读取到的字符chars[i]与(,[,{进行比较,若匹配,则将chars[i]压入栈中...原创 2019-10-30 00:13:35 · 2293 阅读 · 2 评论 -
数组模拟环形(循环)队列(Java语言实现)
数组模拟环形(循环)队列(Java语言实现)紧接着上一个内容,使用循环队列可以让数组模拟的单向队列复用,这样提高了程序的效率。循环队列:代码实现循环队列类:RepeatQueue.javapackage cn.Day02.demo2;public class RepeatQueue { private int maxSize;//队列的最大长度 private in...原创 2019-08-30 12:05:27 · 298 阅读 · 0 评论 -
数组模拟单向队列(Java语言实现)
数组模拟单向队列(Java语言实现)队列介绍:1.队列是一个有序列表,可以用数组或链表来实现。2.遵循先入先出(First In First Out ,简FIFO)的原则,即:先存入队列的数据,最先取出;后存入的数据要后取出。如图:入队列出队列:用数组模拟队列的示意图:3.分析:一个队列类对象Queue,初始状态下,队列为空,队头指针front=-1,队尾指针rear=-1,其中f...原创 2019-08-30 10:12:14 · 227 阅读 · 0 评论 -
稀疏矩阵的压缩与还原(Java实现)
本文详细讲解了利用Java实现稀疏矩阵的压缩与还原的简单算法,供大家学习、参考和交流!原创 2019-08-29 10:01:37 · 1692 阅读 · 0 评论