数据结构与算法
数据结构与算法编程
悟空学编程
十多年软件开发和管理经验,爱好编程与机器学习。
展开
-
[剑指OFFER]之动态规划:JZ42 连续子数组的最大和
输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。原创 2022-05-09 13:22:42 · 436 阅读 · 0 评论 -
[剑指OFFER]之搜索算法:JZ44 数字序列中某一位的数字
数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。原创 2022-05-09 12:55:23 · 438 阅读 · 0 评论 -
[剑指OFFER]之搜索算法:JZ38 字符串的排列
输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。原创 2022-05-08 11:34:43 · 192 阅读 · 0 评论 -
[剑指OFFER]之搜索算法:JZ11 旋转数组的最小数字
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。#原创 2022-05-06 17:10:48 · 704 阅读 · 0 评论 -
[剑指OFFER]之搜索算法:JZ4 二维数组中的查找
在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。原创 2022-05-06 17:07:32 · 63 阅读 · 0 评论 -
[剑指OFFER]之搜索算法:JZ53 数字在升序数组中出现的次数
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数原创 2022-05-06 17:04:35 · 657 阅读 · 0 评论 -
[剑指OFFER]之栈和队列:JZ59 滑动窗口的最大值
给定一个长度为 n 的数组 nums 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。原创 2022-05-06 16:56:07 · 142 阅读 · 0 评论 -
[剑指OFFER]之栈和队列:JZ73 翻转单词序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?原创 2022-05-05 09:32:25 · 173 阅读 · 0 评论 -
[剑指OFFER]之栈和队列:JZ31 栈的压入、弹出序列
[剑指OFFER]之栈和队列:JZ31 栈的压入、弹出序列原创 2022-05-05 09:25:49 · 120 阅读 · 0 评论 -
[剑指OFFER]之栈和队列:JZ30 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。原创 2022-05-05 09:19:31 · 117 阅读 · 0 评论 -
[剑指OFFER]之栈和队列:JZ9 用两个栈实现队列
文章目录@[TOC]1.题目2.解法2.1 提供的基础结构2.2 解法1总结1.题目用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。2.解法2.1 提供的基础结构import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<原创 2022-05-05 09:00:42 · 128 阅读 · 0 评论 -
[剑指OFFER]之树:JZ68 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。原创 2022-05-05 08:54:42 · 161 阅读 · 0 评论 -
[剑指OFFER]之树:JZ86 在二叉树中找到两个节点的最近公共祖先
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。原创 2022-04-29 14:21:12 · 1558 阅读 · 0 评论 -
[剑指OFFER]之树:JZ37 序列化二叉树
通过中序遍历 加 前序(或者后续) 即可恢复一颗二叉树。原创 2022-04-29 14:13:55 · 1658 阅读 · 0 评论 -
[剑指OFFER]之树:JZ78 把二叉树打印成多行
给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。原创 2022-04-29 14:09:00 · 82 阅读 · 0 评论 -
[剑指OFFER]之树:JZ28 对称的二叉树
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)原创 2022-04-29 13:36:23 · 1610 阅读 · 0 评论 -
[剑指OFFER]之树:JZ8 二叉树的下一个结点
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示原创 2022-04-29 13:32:50 · 2147 阅读 · 0 评论 -
[剑指OFFER]之树:JZ36 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。原创 2022-04-28 13:31:54 · 137 阅读 · 0 评论 -
[剑指OFFER]之树:JZ84 二叉树中和为某一值的路径(三)
给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum原创 2022-04-28 13:28:12 · 106 阅读 · 0 评论 -
[剑指OFFER]之树:JZ34 二叉树中和为某一值的路径(二)
输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。原创 2022-04-28 13:24:41 · 100 阅读 · 0 评论 -
[剑指OFFER]之树:JZ82 二叉树中和为某一值的路径(一)
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。原创 2022-04-28 13:24:20 · 87 阅读 · 0 评论 -
[剑指OFFER]之树:JZ7 重建二叉树
给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。原创 2022-04-22 08:58:59 · 94 阅读 · 0 评论 -
[剑指OFFER]之树:JZ26 树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)原创 2022-04-22 08:58:36 · 102 阅读 · 0 评论 -
[剑指OFFER]之树:JZ27 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。原创 2022-04-22 08:58:13 · 96 阅读 · 0 评论 -
[剑指OFFER]之树:JZ32 从上往下打印二叉树
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。原创 2022-04-22 08:57:53 · 68 阅读 · 0 评论 -
[剑指OFFER]之树:JZ33 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。原创 2022-04-22 08:57:33 · 98 阅读 · 0 评论 -
[剑指OFFER]之树:JZ54 二叉搜索树的第k个节点
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。原创 2022-04-22 08:59:14 · 94 阅读 · 0 评论 -
[剑指OFFER]之树:JZ77 按之字形顺序打印二叉树
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)原创 2022-04-21 15:53:15 · 514 阅读 · 0 评论 -
[剑指OFFER]之树:JZ55 二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。原创 2022-04-21 15:49:45 · 59 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ18 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。原创 2022-04-21 12:17:23 · 346 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ76 删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5原创 2022-04-21 12:15:12 · 749 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ22 链表中倒数最后k个结点
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。原创 2022-04-21 12:03:18 · 620 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ23 链表中环的入口结点
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。原创 2022-04-21 12:01:06 · 492 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ52 两个链表的第一个公共结点
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)原创 2022-04-21 11:45:46 · 490 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ25 合并两个排序的链表
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。原创 2022-04-21 11:37:32 · 490 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ24 反转链表
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。原创 2022-04-21 11:33:17 · 190 阅读 · 0 评论 -
[剑指OFFER]之树:JZ7 重建二叉树
使用递归 需要理解树的前序和中序遍历的特点。原创 2022-04-11 21:17:39 · 1462 阅读 · 0 评论 -
[剑指OFFER]之链表:JZ6 从尾到头打印链表
使用头插法或者栈。算法系列在github上有一个开源项目,主要是本系列博客的demo代码。原创 2022-04-11 20:47:46 · 812 阅读 · 0 评论 -
[剑指OFFER]之其他:JZ5 替换空格
熟悉String即可,用StringBuilder 节约空间。原创 2022-04-11 21:07:17 · 65 阅读 · 0 评论 -
[剑指OFFER]之搜索:JZ4 二维数组中的查找
这道题的结题点在右上角元素原创 2022-04-11 20:44:01 · 77 阅读 · 0 评论