🌟每日一题|剑指Offer地狱级难题!正则表达式匹配,你能扛住吗?🌟 💡题目描述 《剑指Offer 19. 正则表达式匹配》 请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,'*'表示它前面的字符可以出现任意次(含0次)。例如,字符串"aaa"与模式"a.a"或"ab*ac*a"匹配,但与"aa.a"或"ab*a"不匹配。 难度:⭐⭐⭐⭐⭐(地狱级动态规划) 🚨核心提示 1️…
🌟每日一题|剑指Offer地狱级难题!正则表达式匹配,你能扛住吗?🌟 💡题目描述 《剑指Offer 19. 正则表达式匹配》 请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,'*'表示它前面的字符可以出现任意次(含0次)。例如,字符串"aaa"与模式"a.a"或"ab*ac*a"匹配,但与"aa.a"或"ab*a"不匹配。 难度:⭐⭐⭐⭐⭐(地狱级动态规划) 🚨核心提示 1️…
1. 算法概述 1.1 什么是回文数? 回文数是指一个数从左往右读和从右往左读是一样的,例如121、1221、12321等都是回文数。 1.2 回文数的特点 回文数是对称的,中间的数是对称轴。 2. 解题思路 2.1 从数学角度出发 从数学上考虑,实现回文数算法的核心思想是判断数的前半部分和后半部分是否相同。 2.2 从编程角度出发 从编程角度出发,我们可以先将数转化为字符串类型,再进行判断。 3. 算法实现 3.1 方案一:暴力枚举 暴力枚举算法时间复杂度较高,但是实现简单,对于小规模的数据集可行。 具体思路:遍…
一、环形链表的定义和特点 1. 环形链表的概念 环形链表是一种特殊的链表,它的最后一个节点指向头节点,形成一个环。通常情况下,链表中的每个节点都有一个指针指向下一个节点。但在环形链表中,最后一个节点的指针指向头结点,达到了闭合的效果。 2. 环形链表的特点 环形链表有以下特点: 最后一个节点指向头结点,形成一个环 遍历时需要判断节点是否为空或是否遍历完整个链表,避免死循环 插入、删除、查询等操作需要注意环的特殊性质 二、环形链表的创建和操作 1. 创建环形链表的方法 创建环形链表的方法和单链表类似,只需将最后一个节…
算法简介 在处理有序数组时,常常需要将它们合并到一起。一种朴素的方法是将它们直接合并,但这样需要将所有元素重新排序,时间复杂度为O(nlogn)。这篇文章介绍两种算法:双指针法和归并排序法,它们可以更加高效地合并有序数组。 双指针法 算法思路 双指针法是一种从两个有序数组的开头开始遍历的算法。 1.我们设定两个指针分别指向两个有序数组的第一个元素。 2.比较两个指针所指向的元素,把较小的元素加入到结果数组中,然后将指向该元素的指针后移一位。 3.重复以上步骤,直到有一个指针遍历完了整个数组。 这个方法类似于归并排序…
题目描述 给出一个链表和一个值 x,对链表进行分隔,使得所有小于 x 的节点都在大于等于 x 的节点之前。 你应该保留两个分区中每个节点的初始相对位置 例如: 输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5 思路分析 本题要求按照某个条件将链表分成两部分,可以采用双指针的方法实现,跑一遍循环,小于 x 的元素放在前面,大于等于 x 的元素放在后面。 具体实现步骤如下: 实例化两个链表:lessList 用于存放小于 x 的值,greaterList 用…
一、简介 A.算法简介 归并排序是一种稳定的排序算法,其最坏时间复杂度为O(nlogn)。它的基本思想是将待排序的数组不断划分为两个部分,将各部分进行排序,然后再合并成一个有序的数组。 B.算法分类 归并排序算法可以分为两类:自顶向下的递归实现和自底向上的迭代实现。 二、归并排序 A.算法基本原理 归并排序的基本原理是将待排序列分成若干个子序列,然后对每个子序列进行排序,最后再将排序好的若干个子序列合并成一个有序的整体序列。 B.算法流程图 C.算法实现 以下是JAVA语言的归并排序实现: public class…
算法比较:深度优先搜索 vs 广度优先搜索 一、概述 A. 问题背景 深度优先搜索和广度优先搜索是两种搜索算法,在图或树中查找特定节点或路径的过程中经常使用。 B. 问题描述 在一个图或树中,查找某个节点或路径。 C. 算法思路 深度优先搜索:从开始节点出发,一直向其相邻未访问过的节点前进,直到找到目标节点或已经完全探索整个图或树。 广度优先搜索:从开始节点出发,首先访问其相邻节点,然后依次访问它们的相邻节点,直到找到目标节点或已经完全探索整个图或树。 二、深度优先搜索 A. 深度优先搜索原理 深度优先搜索从某个节…
一、引言 A. 问题背景 二叉树是一种经典数据结构,在计算机科学和编程中有着广泛的应用。其中最常见的问题是如何在二叉树中查找给定节点的最大深度或最小深度。这个问题有许多种解法,本文将重点介绍动态规划和递归两种解法。 B. 问题描述 给定一颗二叉树,找出树的最大深度和最小深度。树的深度定义为从根节点到最远叶子节点的距离。距离是指沿树边从一个节点到另一个节点的路径长度。 二、算法思路 A. 动态规划解法 动态规划解法的思路是先处理子问题,然后再使用子问题的解来求解原问题。对于这个问题,我们可以把问题分解为: 对于每个节…
插入排序算法的介绍 插入排序算法是一种简单而常见的排序算法,通常用于对小型数据集进行排序操作。插入排序算法与选择排序算法有些相似,但其实现方式和复杂度略有不同。 本文将介绍插入排序算法的基本思想、链表插入排序的简介、算法流程、时间复杂度分析、实例演示、优化等内容,希望能对读者理解插入排序算法以及其在实际应用中的用途有所帮助。 插入排序的基本思想 插入排序算法的基本思想非常简单:将一个待排序的元素插入到已经排好序的子序列中,使之成为一个更长的有序序列。 插入排序算法的实现方式类似于扑克牌的排序,即从一堆无序的扑克牌中…
题目描述 给定一棵二叉树,判断是否是对称二叉树。 解题思路 定义对称二叉树 对称二叉树是指一个二叉树的左右两个子树镜像对称。 递归解法 从根节点开始,判断左右子树是否对称,判断方法是比较左右子树的根节点值是否相等,然后分别递归判断左子树的左子树和右子树的右子树是否对称,左子树的右子树和右子树的左子树是否对称。 非递归解法 使用队列辅助遍历二叉树,每次将左右节点按照对称的方式加入队列中,再逐个比较是否对称。 代码实现 递归解法代码 public boolean isSymmetric(TreeNode root) {…