算法
HayPinF
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归并排序,C++
归并排序,C++原创 2023-01-10 23:19:51 · 229 阅读 · 0 评论 -
最长无重复子串(滑动窗口)
最长无重复子串(滑动窗口)原创 2023-01-09 23:55:02 · 203 阅读 · 0 评论 -
leetcode463岛屿周长的深度优先搜索分析
leetcode463岛屿周长的深度优先搜索转载 2022-10-13 16:01:07 · 183 阅读 · 0 评论 -
不递归实现二叉树前序遍历、中序遍历
不递归实现二叉树前序遍历转载 2022-10-04 22:20:15 · 272 阅读 · 0 评论 -
狗东二面算法笔试:给出了一个整数数组从前到后两两元素的与或结果的数组,求出原始数组,做出一半
假设有一个长度n的整数数组,数组中元素分别是从1到n满布的正整数,元素顺序任意组合。现在给出这个数组的从前到后两两元素进行与或^的结果的一个数组,让求出原始数组。函数签名:vector<int> getOriginArr(vector<int> xor_vec,int n);解:与或是指只当对应位一个是0另一个是1时才得到1,否则得到0;即0^0=0;1^1=0;0^1=1;1^0=1;与或的特性是:1、一个数字A与自身与或的结果为0;2、0与任何数字与或的结果都是那个数字本身,原创 2021-03-17 16:25:01 · 229 阅读 · 0 评论 -
某度算法题:含重复元素数组保持稳定去重
题:给定一个整数数组arr,其中元素可能重复,要求返回去重后的数组,且去重保持稳定,也就是把重复的第二个元素去掉而保留第一个元素。解:利用通排序的思想,第一次遍历输入数组,确定元素大小区间[min,max],然后申请max-min+1的桶数组bukarr,全部初始化成[min,max]区间之外的某个不会出现在输入数组元素区间内的数比如min-1。然后构造输出数组newarr,第二次遍历输入数组,对元素x,其在桶数组内的下标就是x-min,先检查bukarr[x-min]是否已经被标记1,如果没有被标记1原创 2021-03-17 14:40:28 · 206 阅读 · 0 评论 -
递归缩小问题规模直至边界值可知导致所在分支结果可知,状态机穷举,以及递归回溯vs递归传累计结果两种用法
参考"团灭 LeetCode 股票买卖问题"https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484508&idx=1&sn=42cae6e7c5ccab1f156a83ea65b00b78&chksm=9bd7fa54aca07342d12ae149dac3dfa76dc42bcdd55df2c71e78f92dedbbcbdb36dec56ac13b&scene=21#wechat_redirect原创 2021-03-14 23:26:00 · 251 阅读 · 0 评论 -
一维、二维动态规划,与递推递归缩小问题规模的感悟
动态规划,核心思想就是一个递推公式以及边界值,数学上叫归纳法。一维动态规划典型如斐波那契数列,f[i]=f[i-1]+f[i-2];dp[i]=dp[i-1]+dp[i-2]; 边界值f[1]=1,f[2]=1,即dp[1]=1,dp[2]=1已知。二维动态规划典型如二维整数数组从左上角到右下角,只能向右或向下运动时的最小、最大路径和:dp[i-1][j-1] dp[i-1][j]dp[i][j-1] dp[i][j]最小路径和:dp[i][j]=min(dp[i...转载 2021-03-14 13:40:56 · 685 阅读 · 0 评论 -
n维数组内m长度滑动窗口最大值,转载
https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.html重在理解所维持的当前窗口内元素最大值及其右边较小值元素的下标的队列的用处:一个窗口内最大值元素左侧的元素在当前窗口内没用,对下一窗口最大值更没用,没用就是不用考虑。反而,一个窗口内最大值元素右侧的递减的元素,在当前窗口内没用,但下一窗口会"挤掉"其前一窗口最左侧的值,万一前一窗口最左侧的值就是前一窗口内最大值,那也要在维护的当前窗口内最大值元素及其右侧递减转载 2021-03-13 16:08:23 · 284 阅读 · 0 评论 -
翻转链表,合并两个有序链表,补充一个翻转链表很清晰的实现
翻转链表、合并两个有序链表#include<iostream>struct Node{ int val; Node *pnext; Node(int arg,Node *pNext=nullptr):val(arg),pnext(pNext){};};Node* TurnList(Node *p){ //翻转链表 if(!p)return nullptr; Node *ppre(p),*pcur(p->pnext),*pnext(n原创 2021-03-12 22:38:35 · 263 阅读 · 0 评论 -
n维数组的m维滑动窗口从左滑到右的每个窗口内最大值
https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.html#include<iostream>#include<vector>#include<queue>using namespace std;/*一个整形数组arr和一个大小为w的窗口从数组的最左边滑倒最右边,窗口每次向右滑一个元素。返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大转载 2021-03-12 01:09:32 · 426 阅读 · 0 评论 -
狗东无人车一面两个算法题,20200311,动规、二进制
1、左上角到右下角最大路径和。解:动规不解释。2、0到非负整数m之间所有整数,格子的二进制表示中1的个数。解:递推,i:前一个数若最后的二进制位是0,则当前数的二进制1个数是前一个数二进制个数+1;ii:前一个数最后的二进制位是1,则向前找连续的二进制1的个数nCount,当前数的二进制1个数是前一个数二进制个数-nCount+1;#include<iostream>/*1\二维矩阵,*/#include<vector>using namespace st原创 2021-03-11 18:51:56 · 212 阅读 · 0 评论 -
贪心算法 leetcode 452用最少数量的箭引爆气球 自己写的,思路清晰
题:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,..原创 2021-03-11 15:09:42 · 197 阅读 · 0 评论 -
回溯法 剑指OFFER第12题,矩阵中的路径,自己写的,清晰明白
先看题:a b t gc f c sj d e h题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,上面的3x4的矩阵中包含一条字符串"bfce"的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串"abfb"的路径,因为字符串的第一个字符b占据了矩阵中的第...原创 2021-03-10 11:50:47 · 255 阅读 · 0 评论 -
算法题:无序数组的中位数,C++,概念解释
转载:https://www.cnblogs.com/shizhh/p/5746151.html中位数,就是数组排序后处于数组最中间的那个元素。说来有些麻烦,如果数组长度是奇数,最中间就是位置为(n+1)/2的那个元素。如果是偶数呢,标准的定义是位置为n/2和位置为n/2+1的两个元素的和除以2的结果,有些复杂。为了解答的方便,我们假设数组长度暂且都为奇数吧。1、硬刚排序,最小复杂度nlogn,快排、堆拍、归并排序,然后直接按(n+1)/2取出中位数;2、快排确定中位数,在快排的递归中判断中位数转载 2021-03-06 13:49:17 · 650 阅读 · 0 评论 -
温习一下快排和归并排序,假装在面试手撕,再加一个使用标准库std::partition函数实现二分原位重排的快排
每次写出来都不一样,说明我不是人不是机器。#include<iostream>#include<vector>void FastSort(std::vector<int> &arr,int is,int ie){ if(is>=ie)return; int i(is),j(ie); int val(arr[i]); while(i<j){ while(i<j && arr[原创 2021-02-02 10:05:57 · 1213 阅读 · 0 评论 -
Golang切片传引用的注释事项,有向图数据结构的生成,深度优先与广度优先遍历
1、Golang切片Go数组与C++数组一样,理论上,在定义时就要使用常数字面值定义数组大小,然后Go将对数组初始化为元素类型的零值,C++则不会进行初始化,只是返回Go:var arr [3]int //自动初始化为{0,0,0}arr = [3]int{1, 2, 3} //C++:静态数组:规范的用法是在数组定义时使用常数字面值定义数组大小,从而使静态数组在编译期间就能确定要分配的栈内存大小。但有的编译器,比如darwin的clang++,也是可以用变量指定数组大小的。...原创 2021-01-03 16:05:55 · 394 阅读 · 0 评论 -
最长公共子串 二维数组 Go实现
参考:https://blog.youkuaiyun.com/dongyanwen6036/article/details/87914940//CommonSubstr 寻找两个字符串间的最大相同子串func CommonSubstr(A string, B string) string { //构造BxA的二维数组C,每个元素C[i][j]包含两个信息:1、该元素对应的B[i]与A[j]两个字符是否相同 //2、 如果B[i]与A[j]相同,且各倒退一个字符B[i-1]A[j-1]也相同,则与前面.转载 2021-01-01 14:55:46 · 366 阅读 · 0 评论 -
leetcode 174地下城游戏 动态规划解法的Go语言实现 原创
https://mp.weixin.qq.com/s/MydL7eyzdfJc6jYZNwFWWw正好在学Go语言,斗胆用Go答题,写了很长://20201231FHP:动态规划魔塔问题package mainimport "fmt"func init() {}func main() { var nRow int = 3 var nCol int = 3 var dp = make([][][]int, nRow, nRow) for i := 0; i < nRow原创 2020-12-31 19:53:53 · 211 阅读 · 0 评论 -
单纯实现\*正则表达式的小算法
参考自《labuladong公众号》,实现"a*b"匹配"aaaab"的正则表达式小算法:#include <iostream>#include <string>using namespace std;//20201210:实现"a*b"匹配"aaaaab"但不匹配"aa"的正则表达式,用递归bool IsMatch(string instr,string pattern,string lastcha){ string chxing("*"); if(原创 2020-12-10 20:56:54 · 400 阅读 · 0 评论 -
计算二叉搜索树的累加树,自定义“右子节点——根节点——左子节点“的遍历顺序
力扣538题,BST转化累加树但代码是没看答案自己写的:#include<iostream>class TreeNode{public: int val; int nCount; TreeNode *pl; TreeNode *pr; TreeNode(int val,TreeNode *pl,TreeNode *pr){ this->val=val; this->nCount=0;原创 2020-11-01 12:15:11 · 246 阅读 · 0 评论 -
剑指offer第3题——找出数组中重复的数字
面试题3——找出数组中重复的数字(反证法)在一个长度为n的数组里所有整数都在m~m+n-1范围内,(注意原题是长度为n的所有数字都在0~n-1的范围内,但这里我强调了范围的偏移m,随着解释会慢慢清楚的)。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组[3,5,-1,-2,0,3,5],那么对应的输出是数字3或5.解析:笨方法是来一个i、i+1的遍历,使数组中所有整数都两两比较,能找出所有重复数字,这时间复杂度原创 2020-09-01 21:14:13 · 311 阅读 · 0 评论 -
剑指offer逆序对数(归并排序)
//逆序数就是在归并排序时统计一下,是归并排序的副产品#include<iostream>using namespace std;void GuibinSort(int arr[],size_t ns,size_t ne,size_t &nCount) { //返回逆序对数,由于每个递归的归并都可能有逆序对,如果将逆序对数返回 //还要对逆序对数求和,不如将逆序对数传引用到每个递归中自增 //递归触底,返回 if(ns==ne) return; //.原创 2020-09-01 22:44:42 · 181 阅读 · 0 评论
分享