
leetcode
文章平均质量分 58
星光技术人
自动驾驶感知算法工程师
展开
-
剑指offer17---打印从1到最大的n位数
原题设定数组再INT32的范围内,所以可以直接使用for循环依次求出;但是如果数值超过INT32,就需要使用long型;如果数字比long更大怎么办;无论是short/int/long…任意变量类型,数字的取值范围都是有限的。因此,大数的表示应用字符串String类型。...原创 2022-07-29 07:53:45 · 94 阅读 · 0 评论 -
快速乘写法
使用加法代替两个数的相乘。原创 2022-08-06 20:14:02 · 107 阅读 · 0 评论 -
剑指offer 44【数字序列中的某一位】【100%,100%】
首先计算我们想要的结果是落在那批数中。然后计算结果时目标数字的第几位数。然后计算结果落在那个数字中。原创 2022-07-15 22:34:25 · 111 阅读 · 0 评论 -
【剑指offer59】队列的最大值
题目辨析:这里的操作pop_front和push_back就是常规双向队列的意义,就是按照先进先出的规则来进行,唯一要做的是,需要实时最新队列的最大元素;维护一个双向队列,使得队首元素始终是目前队列的最大元素。...原创 2022-08-04 10:01:19 · 136 阅读 · 0 评论 -
求余计算的几种方法
普通求解首先计算ab ,然后求模;这样会造成ab可能超过INT_MAX,并且复杂度为O(N)循环求余快速幂求余递归思路快速幂时间复杂度O(lonN)原创 2022-07-08 00:18:56 · 1479 阅读 · 0 评论 -
ACM模式的输入输出
输入用逗号隔开的字符串,去除字符串填入数组。原创 2022-07-23 11:03:19 · 3945 阅读 · 0 评论 -
【剑指offer65】不适用加减乘除做加法
并且使用ubsigned int会把第一个索引位置0变为1,但是接着就要左移,所以对结果没有影响。使用位运算,10进制的加减法,计算两个数的和的个数,进位数,相加;原创 2022-08-07 17:31:40 · 212 阅读 · 0 评论 -
【剑指offer33】二叉搜索树的后序遍历序列
根据后续遍历数组的特性,最后一个元素为根节点,前边分为左右子树两部分,且左子树部分数组元素值小于根节点值,右子树部分数组元素大于根节点值。原创 2022-08-02 22:02:33 · 148 阅读 · 0 评论 -
【84】柱状图中得最大矩形
那么位置i的高度可以构成的最大面积为(R-L-1)*height[i];最左侧和最右侧的边界索引可以用-1和heights.size()表示。使用单调栈求位置i左右两侧第一个小于位置i高度的索引L,R;原创 2022-08-25 16:04:14 · 167 阅读 · 0 评论 -
【力扣33】搜索旋转排序数组
【代码】【力扣33】搜索旋转排序数组。原创 2022-08-24 17:14:58 · 133 阅读 · 0 评论 -
大顶堆与小顶堆
一个二维数组,形状为[N,M],使用sort完成按照第二列升序排序})原创 2022-08-19 15:37:39 · 223 阅读 · 0 评论 -
【力扣572】另一颗树的子树
= 子树根节点的右树的最左节点作为左树最右节点的后节点会造错误==原创 2022-08-09 12:08:52 · 1971 阅读 · 0 评论 -
力扣399【除法求值】【并查集】
判断两个节点是否在一个集合里,通过两个节点的根节点判断code注意事项我在写这道题的时候在这个地方犯了错原创 2022-06-23 11:23:11 · 200 阅读 · 0 评论 -
力扣33【搜索旋转排序数组】
通过得到数组A的某位置在数组B中的位置,就可以在数组A上完成二分查找;因为二分查找需要根据区间左右值于target的大小关系来更新区间;所以找到数组A与数组B的元素对应关系,就可以知道数组A中某位置的元素大小;寻找数组A的首元素在数组B中的位置,为计算两个位置的映射做准备trick使用二分法来查找起始元素,当mid大于数组B的末尾元素是,选择左半区间根据元素m在数组A中的位置,得到在数组B的位置;转换关系如下:3)二分查找......原创 2022-06-21 18:08:48 · 190 阅读 · 0 评论 -
左神算法中级班第八课[C++代码]
左神算法中级班第八课原创 2022-06-16 15:51:05 · 433 阅读 · 0 评论 -
左神算法中级班第七课[C++代码]
左神算法 中级班第7课原创 2022-06-16 15:20:12 · 441 阅读 · 0 评论 -
左神算法中级班第六课[C++代码]
左神算法中级班第六课原创 2022-06-16 10:37:01 · 246 阅读 · 0 评论 -
左神算法中级班第五课[C++代码]
左神算法中级班第五课原创 2022-06-15 23:11:33 · 416 阅读 · 0 评论 -
左神算法中级班第四课[C++代码]
左神算法中级班第四课原创 2022-06-15 22:19:02 · 280 阅读 · 0 评论 -
左神算法中级班第三课[C++代码]
左神算法中级班第三讲原创 2022-06-15 20:48:47 · 295 阅读 · 0 评论 -
左神算法中级班第二课[C++代码]
左神算法中级班第2课原创 2022-06-15 16:30:16 · 213 阅读 · 0 评论 -
左神算法中级班第一课[C++代码]
左神算法中级班第一课原创 2022-06-15 14:13:51 · 293 阅读 · 0 评论 -
完全背包问题以及优化小技巧
完全背包问题题目:给定一个数组Arr,每一个元素表示一种硬币 ,数量无限。现在需要这些种硬币组成我们的目标是aim,问有多少中组合的方法;Arr = {3,2,1,5,7,3},aim = 20;递归解法寻找可变参数:idx表示从数组中的第idx以后的元素中找到组成rest的组合数;rest的初始值为aim;这类递归问题可以想成是一颗树;f(idx,rest)表示数组Arr的第idx以后的元素集合,从这个集合中选取硬币组成rest的组合数;code//表示从数组种的idx位置开原创 2022-05-26 20:36:14 · 218 阅读 · 0 评论 -
三部曲套路解bob活命问题
bob活命问题题目:给定一个二维表格,行列分别为M和N;bob目前所处得位置是(a,b);bob每一次移动都可以往上下左右四个位置等概率得移动;如果bob越界,那么死亡;问从位置(a,b)出发走K步以后,bob存活的概率;解法:先求存活的可能次数,除于总可能数递归解法code//Bob从(cur_x,cur_y)出发跳rest步到达棋盘(M,N)内有多少种走法int get_N1(int cur_x, int cur_y, int M, int N,int rest){ if (cu原创 2022-05-26 17:17:32 · 196 阅读 · 0 评论 -
套路解---马走棋盘问题
马走棋盘问题题目:象棋棋盘假设横线10条,竖线9条;左下角为位置原点(0,0);假设马现在在原点,跳10次刚好跳到(7,7)有多少种跳法;递归写法code//暴力递归算法//象棋"马"从(0,0)出发跳rest步到达(aim_x,aim_y)有多少种测法//反向来看(aim_x,aim_y)到(0,0)有多少跳法//cur_x,cur_y表示象棋"马"现在距离目标位置得差值int get_N1(int cur_x, int cur_y, int rest){ //象棋不能越界,越界原创 2022-05-26 16:50:46 · 479 阅读 · 0 评论 -
三部曲解下棋先手后手问题
三部曲解下棋先手后手问题1. 题目2. 暴力递归解法3. 记忆搜索解法4. 严格表结构解法1. 题目两个人下棋,给定一个数组Arr={1,4,9,2,10,7};两个人只能从数组两端拿元素,得到获胜者的分数;首先明确一下,这个游戏的最优解是先手必赢,但是如果是现实中两个人玩游戏就不一定了2. 暴力递归解法思路想得到优胜者的分数,优胜者一定是两个人中的一个,要不就是甲赢要不就是乙赢;甲赢的时候可能是先手也可能是后手,那么就可以看成甲先手(乙后手)得到的分数和甲后手(乙先手)得到的分数中的最大值原创 2022-05-26 10:47:05 · 789 阅读 · 0 评论 -
一道题讲解动态规划的前世今生
动态规划的前世今生1. 暴力递归2. 记忆搜索解法3. 严格表结构4. 总结题目:给一个数组Arr=[2,3,5,7,5],aim=10;得出数组中组成aim的元素个数最少是多少;下面从三个方面依次解题,逐步从递归解法过渡到动态规划1. 暴力递归思路设f(index,aim)表示从index开始的硬币中,组成aim的最小硬币数;那么我们的目标为f(0,10);f(index,aim) = min(f(index+1,aim),1+f(index+1,aim-Arr[index]))第一项原创 2022-05-25 21:23:51 · 179 阅读 · 0 评论 -
位运算题目
位运算题目1. 位图解决某一范围上数字的出现情况,节省大量时间2. 位运算求最大值3. 判断一个整数是否为2的幂4. 判断一个整数是否为4的幂使用位运算完成两个数的加减乘除1. 位图解决某一范围上数字的出现情况,节省大量时间题目分析 使用哈希方法进行求解,常规思路为申请一个哈希表,将文件中每一个数字经过哈希函数以后的哈希值放进对应的哈希格子(哈希表相应的位置值加一);这样将文件中的所有数字都遍历一遍以后,观察 哈希表,哈希表中元素为0的位置对应的数字就是没有出现的数字; 但是这样的话,就原创 2022-05-25 15:42:04 · 204 阅读 · 0 评论 -
二叉树之Morris遍历
二叉树之Morris遍历1. Morris遍历序2.Morris中序遍历3.Morris后序遍历4. Morris遍历判断搜索二叉树5. 回归遍历和Morris遍历的使用时机若可以修改原始树就可以使用morris遍历,因为morris遍历时利用树叶节点的空指针实现的;有左树的节点可以到达两次,根据左子树最右节点的指向确定是第几次回到节点,1. Morris遍历序#include<iostream>#include<vector>using namespace std;原创 2022-05-25 11:53:44 · 428 阅读 · 0 评论 -
基础提升---树形DP补充
基础提升---树形DP补充题目1:最大距离题目2:题目1:最大距离节点距离表示某两个节点之间的节点的个数;求以某节点为根节点的树中所有节点距离的最大距离思路分析节点A的最大距离有三种情况:节点A参与节点A左子树的最大深度+右子树的最大深度+12)节点A不参与max(左子树最大距离,右子树最大距离)所以树形DP写法需要返回两个信息:i.最大深度 ii.最大距离code#include<iostream>using namespace std;struct原创 2022-05-25 09:37:52 · 149 阅读 · 0 评论 -
单调栈结构
单调栈结构应用1应用2应用3单调栈结构可以得到一个数组中某位置左侧右侧比该位置元素大的元素和对应的索引值;比如数组Arr = [5,4,6,7,2]位置2对应的元素6;左侧比他大的元素是None,右侧比它大的元素为7;应用1当数组中没有重复元素的时候,返回数组中每一个位置左右两侧第一个大于该位置元素的元素值,如果某一侧没有满足条件的元素,就返回-1思路维护一个栈底到栈顶元素绝对递减的栈,依次遍历输入元素,当满足递减栈条件的时候,将元素压入栈;但是如果遍历的元素不满足单调栈的条件,这个时候原创 2022-05-24 21:26:42 · 179 阅读 · 0 评论 -
滑动窗口最值问题
滑动窗口最值问题基础思想例题基础思想在求数组窗口最值的时候,需要维护一个双向的队列;对于最大值问题需要保证维护过程中队列绝对递减;步骤:两个 指针L和R;1) 指针R右移的时候,将经过的索引加入队列,并根据队列里边已经存在的索引来决定操作,在往队列尾部加入元素的时候,一定要保证待加入的索引值对应的元素绝对小于队列尾部索引值对应的元素;如果不满足条件,那么就把队列尾部 的索引值弹出,直到满足条件的时候加入;2) 指针L右移的时候,L指针经过的元素对应的索引值在队列中已经失效,判断该失效元素是否为目原创 2022-05-24 18:07:37 · 193 阅读 · 0 评论 -
manacher算法
Manacher算法的应用应用一:最长回文字串应用一:最长回文字串最长回文字串求一个字符串的最长回文字串,可以求每一个字符的最大回文半径;比如说字符串Str = “a2112”;字符串长度为奇数,可以求得每个位置的回文串长度。但是对于后四位’2112‘这是一个回文字串,但是这种办法没办法得出来;所以将字符串Str写为"a#2#1#1#2",求以每个位置为中心的回文子串的长度,最后每个位置得到的回文字串长度除于2就是原始字符串所有位置回文字串的长度;这就是manacher的一个应用;manac原创 2022-05-24 17:01:25 · 204 阅读 · 0 评论 -
基础提升(3)--KMP算法详解
KMP算法详解1. 什么是KMP算法2. KMP算法与暴力匹配算法的不同2.1暴力匹配3. KMP算法1. 什么是KMP算法KMP是快速模式匹配算法的简称,用于匹配两个字符串;假设有两个字符串str1和str2,KMP算法可以快速得到str1中出现的str2算法的首位索引比如:str1 = "aabaabaac"str2 = "aabaac"那么str1中与str2重合的字符串首字符为32. KMP算法与暴力匹配算法的不同2.1暴力匹配假如有两个字符串Str1,str2str1 =原创 2022-05-16 16:21:22 · 288 阅读 · 0 评论 -
基础提升(2)--并查集
什么是并查集一、概念及其介绍二、适用说明三、思路四、code一、概念及其介绍并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。二、适用说明并查集用在一些有 N 个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这个过程看似并不复杂,但原创 2022-05-16 11:37:04 · 140 阅读 · 0 评论 -
基础提升(1)--哈希函数与哈希表
基础提升1--哈希函数与哈希表1. 哈希函数的特征2 哈希表的实现原理和扩容设计randompool结构1. 哈希函数的特征1)一把情况下,输入无穷2)相同的输入必然有相同的输出3)但是不同的输入也有可能出相同的输出,这叫哈希碰撞;4)均匀性和离散性,给一组输入,无论输入是否有规律,经过哈希函数计算的一组输出可以均匀的离散分布在值域上,假如值域是个圆,每个哈希函数值是一个点;当使用一个大小一样的小圆去包括点时,每一次包括住的点个数 都很均匀;描述的也不是很清楚哈希函数越均匀,表示这个哈希函数越原创 2022-05-15 16:40:45 · 350 阅读 · 0 评论 -
N皇后问题
解法一#include<iostream>#include<queue>using namespace std;class NQueeens{public: int num1(int n) { if (n < 1) return 0; vector<int> record(n,-1);//record[i]表示第i行的皇后放在了第record[i]列 return process(0, record, n); } //检..原创 2022-05-13 21:46:29 · 150 阅读 · 0 评论 -
贪心算法介绍
贪心算法是什么1. 贪心算法的解题套路题目1:会议安排问题题目2:哈夫曼编码问题贪心问题,堆和排序是最常用的办法1. 贪心算法的解题套路题目1:会议安排问题思路按会议结束时间排序,依次取出会议结束时间最早的会议#include<iostream>#include<queue>using namespace std;bool cmp(vector<int> N1,vector<int> N2){ return N1[1] >原创 2022-05-13 15:43:54 · 366 阅读 · 1 评论 -
前缀树问题
前缀树问题1. 什么是前缀树2. 构建前缀树1. 什么是前缀树如上图所示,前缀树可以完成查找某数组中是否存在某个字符串A或者有多少字符串的前缀是字符串A;2. 构建前缀树前缀树的结点域class Node{ int pass; int end; set<Node> son; Node(){pass=0;end=0;}};pass表示该节点通过了几次,表示前缀树中以根节点到这个节点字符够成的字符串的个数;构建前缀树code给定一个数组Arr和字符串B,判断字符原创 2022-05-13 14:02:54 · 164 阅读 · 0 评论 -
图的相关基础习题
图的相关基础习题1. 宽度优先遍历2. 广度优先遍历图拓扑排序3. 最小生成树 (kruskal算法)3.1 K算法构架最小生成树(MST)3.2 使用并查集构建接口4. prim算法5. DijKstra算法【说明】下边的代码,都是根据图模板来写,使用了统一的图结构;关于图结构请看我的上一篇博客;在做题的时候,需要根据题目写出图结构的转化函数完整代码的github地址:https://github.com/hjfenghj/cpp_code-graph1. 宽度优先遍历比较简单,就不说思路了原创 2022-05-10 12:38:50 · 153 阅读 · 0 评论