数据结构与算法
主要使用C/C++进行数据结构的相关题目的代码分析和思路分析。
胡乱huluan
此人并不懒,只是不想留下什么
展开
-
力扣LeetCode第五十四题 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。原创 2022-06-06 09:00:23 · 385 阅读 · 0 评论 -
力扣LeetCode第四十八题 旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。原创 2022-06-06 08:57:32 · 330 阅读 · 0 评论 -
力扣LeetCode第一百一十八题 杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。原创 2022-05-27 15:59:39 · 1014 阅读 · 0 评论 -
力扣LeetCode第七百零六题 设计哈希映射
不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:● MyHashMap() 用空映射初始化对象● void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。● int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。● void remove(key) 如果映射原创 2022-05-27 15:57:21 · 130 阅读 · 0 评论 -
力扣LeetCode第五十六题 合并区间
intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。原创 2022-05-27 15:54:43 · 455 阅读 · 0 评论 -
力扣LeetCode第七十五题 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。原创 2022-05-26 19:57:32 · 409 阅读 · 0 评论 -
力扣LeetCode第一百六十九题 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。原创 2022-05-26 19:53:52 · 132 阅读 · 0 评论 -
力扣LeetCode第一百三十六题 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。原创 2022-05-26 19:51:10 · 126 阅读 · 0 评论 -
程序设计复试题 超车问题
假设有一条单向通行的隧道,有一天有 m 辆编号为1到 m 的小轿车从这条隧道入口进入然后从出口驶出。每辆车只会经过这个隧道一次。全部的车都以恒定的速度经过隧道。隧道的入口和出口处均设置有交通执法摄像头。从这两个交通执法摄像头,我们可以很清楚地知道每辆车进入和驶出隧道的顺序。没有两辆车会同时进入隧道,并且也没有两辆车会同时驶出隧道。交通法规禁止车辆在隧道中超车。如果车辆 i 在隧道中超了车辆 j,那么车辆 i 的车主就会面临罚款。每辆车的车主最多被罚款一次,即使他在隧道中超车多次。我们对车辆 i 超车辆 j原创 2022-02-16 22:27:17 · 371 阅读 · 1 评论 -
力扣LeetCode经典算法 队列的最大值
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1原创 2022-02-13 16:50:01 · 251 阅读 · 0 评论 -
力扣LeetCode经典算法 把字符串转换成整数
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。原创 2022-02-13 16:43:17 · 253 阅读 · 0 评论 -
力扣LeetCode经典算法 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。原创 2022-02-13 15:48:45 · 116 阅读 · 0 评论 -
力扣LeetCode经典算法 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。原创 2022-02-13 15:34:29 · 179 阅读 · 0 评论 -
力扣LeetCode经典算法 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。原创 2022-02-12 17:42:41 · 356 阅读 · 0 评论 -
力扣LeetCode经典算法 圆圈中最后剩下的数字
0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。原创 2022-02-12 17:36:15 · 451 阅读 · 0 评论 -
力扣LeetCode经典算法 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。原创 2022-02-12 16:30:33 · 534 阅读 · 0 评论 -
力扣LeetCode第五十八题 最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。原创 2022-02-11 17:46:05 · 6304 阅读 · 0 评论 -
力扣LeetCode经典算法 和为s的连续正数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。原创 2022-02-11 17:12:56 · 147 阅读 · 0 评论 -
力扣LeetCode经典算法 构建乘积数组
给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。原创 2022-02-11 16:56:40 · 227 阅读 · 0 评论 -
力扣LeetCode经典算法 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。原创 2022-02-11 16:47:58 · 350 阅读 · 0 评论 -
力扣LeetCode经典算法 数组中数字出现的次数②
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。原创 2022-02-11 16:21:54 · 271 阅读 · 0 评论 -
力扣LeetCode经典算法 数组中数字出现的次数①
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。原创 2022-02-11 15:47:05 · 262 阅读 · 0 评论 -
力扣LeetCode经典算法 二进制中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量)。原创 2022-02-10 16:13:42 · 173 阅读 · 0 评论 -
力扣LeetCode经典算法 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。原创 2022-02-10 15:55:20 · 375 阅读 · 0 评论 -
力扣LeetCode经典算法 数值的整数次方
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。原创 2022-02-10 15:40:48 · 285 阅读 · 0 评论 -
力扣LeetCode经典算法 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。原创 2022-02-09 16:09:00 · 299 阅读 · 0 评论 -
力扣LeetCode经典算法 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”原创 2022-02-09 16:06:41 · 93 阅读 · 0 评论 -
力扣LeetCode经典算法 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”原创 2022-02-09 15:31:35 · 81 阅读 · 0 评论 -
力扣LeetCode经典算法 求1+2+…+n
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。原创 2022-02-09 15:06:37 · 767 阅读 · 0 评论 -
力扣LeetCode经典算法 平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。原创 2022-02-08 17:33:38 · 115 阅读 · 0 评论 -
力扣LeetCode经典算法 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。原创 2022-02-08 17:21:46 · 88 阅读 · 0 评论 -
力扣LeetCode经典算法 最小的k个数
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。原创 2022-02-08 17:11:43 · 369 阅读 · 0 评论 -
力扣LeetCode经典算法 扑克牌中的顺子
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。原创 2022-02-08 17:03:33 · 548 阅读 · 0 评论 -
力扣LeetCode经典算法 把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。原创 2022-02-08 16:28:16 · 593 阅读 · 0 评论 -
力扣LeetCode经典算法 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。原创 2022-02-07 15:46:40 · 301 阅读 · 0 评论 -
力扣LeetCode经典算法 二叉树中和为某一值的路径
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。原创 2022-02-07 15:35:21 · 623 阅读 · 0 评论 -
力扣LeetCode经典算法 机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?原创 2022-02-07 15:15:52 · 103 阅读 · 0 评论 -
力扣LeetCode经典算法 矩阵中的路径
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。原创 2022-02-07 15:00:37 · 198 阅读 · 0 评论 -
力扣LeetCode经典算法 翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。原创 2022-02-06 15:41:36 · 630 阅读 · 0 评论 -
力扣LeetCode经典算法 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。原创 2022-02-06 15:09:39 · 318 阅读 · 0 评论