自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 陌陌聊天数据案例分析

陌陌是一个聊天平台,每天都会产生大量大聊天数据,通过对聊天数据的统计分析,可以更好的构建用户画像,为用户提供更好的服务以及实现高ROI的平台运营推广,给公司的决策提供精准的数据支撑。基于Hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表。统计今日总消息量、每小时消息量、发送和接受用户数、各地区发送消息数据量、发送消息和接收消息的用户数、发送消息最多的top10用户、接收消息最多的top10用户、发送人手机型号的分布情况、发送人的设备操作系统的分布情况。

2024-07-22 23:10:57 806

原创 Git:分布式版本控制系统

也是一个指针,指向与远程仓库交互的commit对象,只有本地与远程仓库交互之后才会移动。3.本地代码库:对暂存区的文件进行提交之后,就来到了本地仓库,作为一个被提交的代码版本被保存起来。标注代码仓库中的某一个版本及其相应的信息,跟代码版本commit对象绑定,不会移动。远程仓库就是在远程服务器上的代码仓库,较为常用的是gitee、GitHub。在本地无法改变远程分支的位置,只有在与远程代码库服务器通信时才能改变。获取远程代码库,来改变本地代码库的远程分支的位置。将远程分支的变更合并到本地分支。

2024-07-12 11:53:47 1714

原创 音乐播放器

【代码】音乐播放器。

2024-07-05 20:27:36 801

原创 坦克大战游戏开发

【代码】坦克大战游戏开发。

2024-06-24 22:15:03 1125

原创 (第32天) 513、找树左下角的值 112、路径总和 113、路径总和II

判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。找出所有符合要求的路径,这就需要在上一题的基础上遍历整颗二叉树,一遇到符合要求的路径就把这条路径加入结果集。给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。严格来说,本题的目的是寻找一条符合要求的路径,而遍历整颗二叉树不是必须的。

2024-06-11 19:17:54 921

原创 (第31天)【leetcode题解】404、左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

2024-06-10 20:08:59 434

原创 (第30天)二叉树阶段总结

深度和高度节点深度:根节点到当前节点的节点个数节点高度:叶子节点到当前节点的节点个数二叉树的最大深度:根节点到离它最远的叶子节点的节点个数,其实就是二叉树的高度二叉树的最小深度:根节点到离它最近的叶子节点的节点个数“求深度和高度的题目” ==> “求最小深度和最大深度(高度)的题目”,题目中让求二叉树(最大/小)深度的问题完全可以转化为求(特定)高度的问题,都可以用遍历的方法加上条件判断语句解决。有用的概念节点深度、二叉树高度、二叉树最大深度、二叉树最大高度节点高度(除外)

2024-06-09 20:48:08 1068

原创 (第29天)【leetcode题解】222、完全二叉树的节点个数 110、平衡二叉树 257、二叉树的所有路径

节点的高度:从最下层节点到该节点的节点个数。节点的深度:从根节点到该节点的节点个数。求深度要从上往下查,用前序遍历(中左右)。求高度要从下往上查,用后序遍历(左右中)。

2024-06-08 16:43:05 1013

原创 (第28天)【leetcode题解】104、二叉树的最大深度 559、N叉树的最大深度 111、二叉树的最小深度

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔。给定一个二叉树 root ,返回其最大深度。给定一个 N 叉树,找到其最大深度。说明:叶子节点是指没有子节点的节点。给定一个二叉树,找出其最小深度。

2024-06-07 16:54:50 658

原创 (第27天)【leetcode题解】101、对称二叉树 100、相同的树 572、另一颗树的子树

在对节点进行比较时,要处理好节点为空的情况因为在这一类型题中,比较节点值是通过进行的,若没有处理节点为空的情况,则在处理数据时会报错。因此,对于节点为空的情况,需要单独处理。

2024-06-06 17:37:02 993

原创 (第26天)【leetcode题解】226、翻转二叉树 589、N叉树的前序遍历 590、N叉树的后序遍历

树的操作都要在遍历的基础上,在遍历的过程中添加某些操作。二叉树节点定义:int val;创建二叉树节点时要用3. 递归三要素:确定参数和返回值、确定终止条件、确定递归逻辑4. 树的迭代遍历:深度优先遍历离不开栈、广度优先遍历离不开队列。

2024-06-05 16:23:10 1278

原创 (第25天)【leetcode题解】二叉树的层序遍历

给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。输入:root = [1,null,3,2,4,null,5,6]输入:root = [3,9,20,null,null,15,7]输入:root = [3,9,20,null,null,15,7]输入: root = [1,3,2,5,3,null,9]输入:root = [1,2,3,4,5,6,7]输出:[1,#,2,3,#,4,5,6,7,#]

2024-06-04 14:56:47 929

原创 (第24天)【leetcode题解】二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历。给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。给你二叉树的根节点 root ,返回其节点值的 层序遍历。层序遍历的时候,队列que每次存储一层数据,只要判断当前遍历到的数据是否是这一层最后一个数据即可。从root开始,每遍历到一个节点,在把它放入结果集的同时,把它的子节点按从左到右的顺序加入队列。

2024-06-03 21:32:58 636

原创 (第23天)【leetcode题解】二叉树的统一迭代法

【代码】(第23天)【leetcode题解】二叉树的统一迭代法。

2024-05-24 15:10:10 465

原创 (第22天)【leetcode题解】二叉树的迭代遍历

前序遍历和中序遍历的不同前序遍历的顺序为中左右,在遍历访问节点的过程中就可以把元素值加入结果集;而中序遍历的顺序为左中右,需要先到达最底层的左子节点在开始将元素加入结果集。这决定了两种遍历方式在实现上的不同。关于root节点为空的情况前序遍历和后序遍历实现时都需要先将root节点压入栈中,如果root为空时,在执行之后把root节点值加入res时就会报错。因此,在这两个实现中,需要先判断root是否为空。后序遍历因为要从root开始遍历整棵树,遍历的条件之一就是root不为空。

2024-05-23 19:34:15 682 1

原创 (第21天)【leetcode题解】二叉树的递归遍历

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历。给定一个二叉树的根节点 root ,返回 它的 中序 遍历。给你二叉树的根节点 root ,返回它节点值的 前序 遍历。空间复杂度:O(n);调用函数使用的栈空间。空间复杂度:O(n);调用函数使用的栈空间。空间复杂度:O(n);调用函数使用的栈空间。时间复杂度:O(n);时间复杂度:O(n);时间复杂度:O(n);

2024-05-22 19:55:11 712

原创 (第20天)二叉树理论基础

到现在已经了解了常见的数据结构:数组、链表、树、哈希表、字符串、栈与队列。然而,在这些数据结构之间也有一些联系:一些数据结构可以由更基础的数据结构作为容器去实现。现在把这些数据结构分为一级基础数据结构和二级基础数据结构来进行总结思考。(一般情况下)一级基础数据结构可以用来实现二级基础数据结构。此外,会先分析一级基础数据结构的内在结构。

2024-05-21 23:45:42 923

原创 (第19天)【leetcode题解】栈与队列基础与题型总结

栈与队列底层实现通常为数组或链表。栈多用于解决相应元素匹配、后缀运算等问题。队列多用于解决动态数据流中求最值、对元素排序等问题。队列中的单调队列和优先级队列是特殊场景下解决问题的利器,要熟悉其特性,活学活用它们的某些行为,例如push()等。在不同场景下选择合适的数据结构,可以使解决问题变得简单和高效。

2024-05-16 22:12:36 455

原创 (第19天)【leetcode题解】239、滑动窗口最大值 347、前K个高频元素

先统计频数需要遍历nums花费O(n);之后遍历频率map最多花费O(n),其中每次堆操作至多花费O(logk);总体花费O(nlogk)。给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。时间复杂度:O(n);nums中的元素最多被push()和pop()队列一次,因此总体时间复杂度为O(n);空间复杂度:O(n);哈希表大小为O(n),堆大小为O(k)。空间复杂度:O(k);

2024-05-16 17:34:42 942

原创 (第18天)【leetcode题解】20、有效的括号 1047、删除字符串中的所有相邻重复项 150、逆波兰表达式求值

栈可以用来进行括号匹配。栈可以用来相邻重复项匹配。用栈匹配的机制为相邻元素的匹配。特定情况下,可以用string字符串来作为栈进行匹配,因为它具有栈先入后出特性相对应的操作:访问栈顶元素、入栈、出栈。针对不同的问题,选择合适的数据结构有利于高效地解决问题。栈适用于计算机的递归操作和后缀表示法运算。

2024-05-15 15:48:53 1273

原创 (第17天)【leetcode题解】232、用栈实现队列 225、用队列实现栈

你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。时间复杂度:push和empty为O(1)、pop和peek为O(n);int pop() 从队列的开头移除并返回元素。时间复杂度:pop为O(n),其他为O(1);int peek() 返回队列开头的元素。

2024-05-14 20:17:05 516

原创 (第17天)栈与队列理论基础

栈与队列的逻辑结构决定了它们的操作规则。栈与队列都是线性结构(逻辑),因此用来对它们进行底层实现的数据结构也多是线性结构。

2024-05-14 10:27:45 222

原创 (第16天)双指针法题型总结

双指针法有很多作用。在有些题中用于解决问题。例如:链表中相关题目。在有些题中用于降低时间复杂度。在有些题中可以降低空间复杂度。

2024-05-11 16:16:49 586

原创 (第15天)字符串基础理论和题型总结

对于字符串的操作考验了对代码的掌控能力,需要用双指针法、扩容等操作来解决问题。其中,对字符串的匹配一方面考察了对代码的掌控能力(暴力解法、KMP算法),另一方面考察了推导解决问题方法的能力(KMP算法)。

2024-05-10 19:38:14 531

原创 (第15天)【leetcode题解】459、重复的子字符串

时间复杂度:O(n);得到前缀表时遍历字符串需要O(n),判断重复子字符串只用了固定的操作数。空间复杂度:O(n);需要前缀表存储字符串的所有前缀子串(包括它自身)的最长公共前后缀长度。因此从小到大枚举出所有可能的子串长度n1,再对这个子串进行上述的判断即可。给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。枚举子串的时间复杂度为O(n),遍历判断子串的时间复杂度为O(n)。优化:这个子串至少要在s中重复一次,所以n1的范围为[1,n/2]。空间复杂度:O(1);

2024-05-10 17:15:38 976

原创 (第13、14天)【leetcode题解】#右旋字符串 28、找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。这都需要使用指针(下标),双指针是常用的,它可以帮助原地修改字符串,还可以降低时间复杂度。匹配时只遍历一次文本串,每遍历到一个字符只做一次判断和常数级的操作。1.字符串的操作和数组有共性:需要下标访问、各种操作都是基于使用下标进行的元素修改。最多遍历全部的本文串,并在每次遍历文本串的内部遍历模式串。翻转操作需要遍历数量级为n的次数。:反转顺序发生改变。

2024-05-09 18:39:43 1314 1

原创 (第12天)【leetcode题解】151、反转字符串中的单词

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。给你一个字符串 s ,请你反转字符串中单词的顺序。空间复杂度:O(1);:空间复杂度为O(1);时间复杂度:O(n);

2024-05-07 21:10:36 521

原创 (第11天)【leetcode题解】344、反转字符串 541、反转字符串II #替换数字

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。:使用两个指针分别指向要交换的元素,进行交换操作。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

2024-05-06 22:36:12 734

原创 CSS基础

CSS:层叠样式表,CSS文件后缀为.css。css用于在html文档中修改(美化)元素样式。核心语法:选择器和声明(属性和属性值)。

2024-05-05 22:33:04 1217

原创 html5基础

HTML5被称为超文本标记语言,它使用标签的形式把各种文本或媒体信息嵌入html文档(网页)中。html文档以是.html结尾的文件。<img>

2024-05-05 14:51:03 699

原创 哈希表总结篇:哈希表基础理论和常见题型

我们常用哈希表来快速访问元素、快速判断是否包含目标元素。哈希表有三类:array、set、map三种哈希结构各有特点:array必须要求明确的大小、set不需要有明确大小、map以pair的形式存储数据。我们应根据不同情况和三种哈希结构的特点选用最合适的哈希结构。

2024-04-30 19:05:38 470

原创 (第10天)【leetcode题解】383、赎金信 13、三数之和 18、四数之和

对于a、b、c三个值中的每一个来说,在遍历时,只要(a/b/c)前后两个遍历到的值相同,那么形成的符合要求的三元组一定会出现相同的情况。分别遍历ransomNote和magazine分别为O(n),因此总体时间复杂度为O(2n);给定一个整数数组nums,在nums中找到nums[i]、nums[j]、nums[k],使得三者相加等于0.:对于四元组的每个元素,凡是前后重复出现的都需要去重,跳到nums中的下一个值开始遍历。),双指针共同搜索nums中剩下的值,使用O(n);空间复杂度:O(n);

2024-04-29 22:22:33 843

原创 (第9天)【leetcode题解】202.快乐数 1.两数之和 454.四数相加II

文章中的题目有多种解法,但为了练习对哈希表的使用、提升对哈希结构的理解,这里一律使用哈希表来解题。解题过程中,使用哈希表可能是使用哈希表的某种特性,可能是其他…快速判断一个元素是否在集合中。(202)

2024-04-24 19:07:01 1267

原创 (第8天)【leetcode题解】242、有效的字母异位词 349、 两个数组的交集

排序的时间复杂度为O(nlogn)、比较字符串是否相等的时间复杂度为O(n),总体的时间复杂度为O(nlogn)。可以用哈希表来存储结果,注意本题的结果数量是不固定的,因此不能用固定空间都数组做哈希表;:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。m表示nums1的长度,n表示nums2的长度。最后遍历哈希表,如果其中有不为0的元素,则表示s和t不是异位词。如果s的长度和t的长度不相等,那么这两个字符串一定不是异位词。遍历哈希表需要的时间复杂度为O(n);

2024-04-23 14:17:46 464

原创 链表理论基础和题型总结

链表的操作中,指针至关重要,双指针使用的频率很高。对于一些问题,需要进行数学推导,使用快慢指针通过题目要求找到满足题意得数量关系,然后用指针的操作表示出来。在链表的相关题型中,大部分判断条件都是指针空还是非空两个指针是否相等。而不是用单纯的存储数字的变量进行条件判断。

2024-04-22 18:52:25 339

原创 (第7天)【leetcode题解】19、删除链表的倒数第n个节点 面试题02.07.链表相交 142、环形链表II

为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。示例1:输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]如果链表无环,则返回 null。示例 3:输入:head = [1,2], n = 1 输出:[1]给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 2:输入:head = [1], n = 1 输出:[]

2024-04-22 17:41:58 1003

原创 (第6天)【leetcode题解】24、两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。建议在具体思考操作流程的时候画图。时间复杂度:O(n);空间复杂度:O(1);

2024-04-21 23:17:12 304 1

原创 (第5天)【leetcode题解】707设计链表 206、翻转链表

val 是当前节点的值,next 是指向下一个节点的指针/引用。定义cur指针来操作next、定义pre指针来指向cur的前一个节点、定义temp指针来保存cur的下一个节点。如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。时间复杂度:涉及index的操作为O(index),其他的为O(1);普通方法是重新定义一个链表,来实现链表的翻转,但缺点是这样太浪费空间。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。空间复杂度:O(n),递归调用使用了n层栈帧空间。

2024-04-20 16:28:22 710

原创 (第4天)【leetcode题解】203、移除链表元素

头节点为要删除的节点时,把头节点往后移一位,同时手动删除该节点的内存空间。非头节点为要删除的节点时,把该节点的前一位节点的。指向下下个节点,同时手动删除该节点的内存空间。这样就可以对原链表用统一的方法进行元素移除了。设置一个虚拟头节点,再进行移除节点的操作。这种方法需要单独写一段逻辑来移除头节点。直接使用原来的链表进行移除操作。的节点,并返回新的头节点。时间复杂度:O(n);空间复杂度:O(1);时间复杂度:O(n);空间复杂度:O(1);给你一个链表的头节点。,删除链表中所有满足。

2024-04-19 17:35:13 396

原创 基于数组的几类算法题总结

这里对题目的详细流程不做赘述,只回顾一遍不同题型中的重难点。

2024-04-18 18:06:36 669 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除