![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法篇
文章平均质量分 54
虚心学习进步
主学C++、linux、网络编程
展开
-
【Leetcode】----最大堆,最小堆
https://www.cnblogs.com/nobita/p/14320239.html原创 2022-03-24 23:58:35 · 418 阅读 · 0 评论 -
【Leetcode】单调栈
1496. 下一个更大元素 I 力扣class Solution {public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { unordered_map<int,int> hashmap; stack<int> st; for (int i = nums2.s...原创 2022-03-10 21:25:41 · 403 阅读 · 0 评论 -
【Leetcode】二叉树
1 后续遍历指 Offer II 047. 二叉树剪枝 力扣/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x),..原创 2022-03-09 21:46:42 · 236 阅读 · 0 评论 -
【leetcode】BFS
1剑指 Offer II 046. 二叉树的右侧视图力扣二叉树的层次遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) :..原创 2022-02-19 22:21:42 · 424 阅读 · 0 评论 -
leetcode ---优先队列题
剑指 Offer II 061. 和最小的 k 个数对 力扣class Solution {public:struct cmp { bool operator()(const pair<int,int>& n,const pair<int,int>& m) { return n.first + n.second > m.first + m.second; }}; priority_queue<pai..原创 2022-02-17 23:42:07 · 7062 阅读 · 0 评论 -
剑指offer做题记录
1.剑指 Offer 03. 数组中重复的数字 https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/class Solution {public: int findRepeatNumber(vector<int>& nums) { /* 法一 排序 */ /* 法二 哈希表 */ map<int, int> mymap;...原创 2021-07-18 22:24:51 · 347 阅读 · 0 评论 -
leetcode位运算总结
·int__builtin_ffs(unsignedintx)返回x的最后一位1的是从后向前第几位,比如7368(1110011001000)返回4。·int__builtin_clz(unsignedintx)返回前导的0的个数。·int__builtin_ctz(unsignedintx)返回后面的0个个数,和__builtin_clz相对。比如7368(1110011001000)返回3。·int__builtin_popcount(uns...转载 2021-08-27 20:46:40 · 173 阅读 · 0 评论 -
leetcode刷题记录
一. 字符串和哈希函数章节1.https://leetcode-cn.com/problems/group-anagrams-lcci/submissions/变位词组思路://eatteaate用sort排序后都是ate,用ate作key,其他[eatteaate]做value。//[eatteaate]用一个vector装看下auto的用法,map怎么添加值class Solution {public: vector<vector<strin...原创 2021-04-24 22:53:58 · 486 阅读 · 0 评论 -
剑指offer面试题30--包含min函数的栈
1.题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。在该栈中,调用min,push,pop,的时间复杂度都是O(1)2.设计思想一应用一个辅助栈,压的时候,如果待压入元素比B栈栈顶大,A压B不压,小于等于,AB栈同时压入,出栈,如果,AB栈顶元素不等,A出,B不出。class Solution {public: stac...原创 2018-08-28 08:45:08 · 293 阅读 · 0 评论 -
剑指offer34题--二叉树和为某一值的路径
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)需要注意,这道题的题意,路径必须是根节点到某叶子节点。根节点到中间节点,即使路径和满足也不行此处做下标记,代码注释我已经写出如果要更完善点,应该加分支限定,此文代码需要更新/*str...原创 2018-08-24 14:32:05 · 133 阅读 · 0 评论 -
剑指offer面试题33二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。设计思想:序列的最后一个元素一定是整棵树的根节点,从序列开头找第一个大于根节点值的元素p->val,该元素后边直到末尾前一个元素的元素值应该都大于p->val(若p到末尾之间还有元素,才满足后序遍历的二叉搜索树),[p,末尾...原创 2018-08-24 14:32:11 · 147 阅读 · 0 评论 -
剑指offer面试题39--数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路一:分析:数组中若一个数字出现次数超过一半,则一定比其他所有元素出现次数的和多,若从数组头开始遍历,令num=array[0],设一个count变量,初值1,遇到相同...原创 2018-08-06 09:35:29 · 125 阅读 · 0 评论 -
剑指Offer面试题21--调整数组顺序使得奇数在偶数前
设计思想(一):维护两个指针,第一个指针初始化指数组首地址,它只向后移动;第二个初始化指数组末尾,它只向前移动。在二者相遇前,若第一个指针指偶数,第二个指针指奇数则交换二者位置代码:#include <iostream>using namespace std;void RecorderOddEven(int* pData, unsigned int length)...原创 2018-08-24 18:12:22 · 124 阅读 · 0 评论 -
剑指offer面试题26树的子结构
1.题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2.设计思想第一步是在树A种查找与B根节点值一样的节点,这实际就是二叉树的遍历bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool hasSubTree=false; ...原创 2018-08-24 18:12:07 · 173 阅读 · 0 评论 -
剑指offer面试题24--反转链表
1.基本思想:设指针pNode,指当前节点CurrentNode,既然要反转就让CurrentNode的next指针指CurrentNode的前驱节点设为preNode,还要循环处理pNode在原链表的next节点,所以反转前事先保留pNode->next以便循环。也就是程序开始前需要定义三个指针pNode,preNode,nextNode2.写代码中考虑几种情况 (1)输入的...原创 2018-08-24 18:12:13 · 127 阅读 · 0 评论 -
串的模式匹配--KMP算法
一 用next[]数组1.求next数组的公式(1)next[0]=-1(2)MAX{k|0<k<j|"t0.....tk-1"="tj-k.....tj-1"},当集合非空时(3) 0 其他情况2.KMP算法思想设s时目标串,t时模板串,设i指针和j指针分别指目标串和模式串的正待比较的字符,另i和j的初值是0。若有si=tj,则i和j分别增1;否则i不...原创 2018-09-01 08:05:57 · 322 阅读 · 0 评论 -
串的模式匹配---Brute-Force算法
简称BF算法,又叫简单匹配算法基本思路:从目标串的s="s0s1.....sn-1"的第一个字符开始和模式串t="t0t1.....tm-1"的第一个字符比较,若相等,则继续比较后续字符,否则从目标串s的第二个字符开始重新和模式串t的第一个字符比较。以此类推。若从模式串的第i个字符开始,每个字符依次和目标串的对应字符相同,则匹配成功,返回i;否则就失败,返回-1 下面举例来说明BF算法...原创 2018-08-31 21:08:57 · 1027 阅读 · 0 评论 -
剑指offer面试题36---二叉搜索树与双向链表
1.题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向 2.通过书上一个例子的图形象描述下: 3.代码实现//一开始我想到的是:中序遍历然后把节点依次用左右指针连起来即可,没有象书中讲的那么麻烦的方法 ,不过书中的这种递// //归的方法还是值得练习的/*struct TreeNode { in...原创 2018-08-24 14:34:28 · 131 阅读 · 0 评论 -
剑指offer面试题7--重建二叉树
描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。class Solution {public: struct TreeNode* reConstructBinaryTree(vector...原创 2018-08-17 15:19:59 · 228 阅读 · 0 评论 -
剑指offer面试题6-从尾到头打印链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/c...原创 2018-08-24 18:12:28 · 123 阅读 · 0 评论 -
剑指offer面试题5:替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { if(str==nullptr||length<=0) ...原创 2018-08-15 21:31:10 · 182 阅读 · 0 评论 -
剑指offer面试题4:二维数组中国的查找
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution {public: bool Find(int target, vector<vector<int> > array) { ...原创 2018-08-24 14:33:01 · 134 阅读 · 0 评论 -
约瑟夫问题
设有n个人排成一圈,其编号1~n,,从编号为1的人开始报数,按顺时针“1,2,3,4”循环报数,数到m的人出列,然后出列者的下一个人开始重新报数,数到m的人又出列,如此反复循环,直到n个人都出列为止。要求输出n个人的出列顺序例如,有8个人的初始序列1 2 3 4 5 6 7 8 ,则出列顺序4 8 5 2 1 3 7 6分析:采用容器array存人的编号,设人的编号放到从1放到n,每次数...原创 2018-04-19 00:21:58 · 568 阅读 · 0 评论 -
剑指offer面试题49---丑数
题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数分析:容易想到使用穷举法对N个数判断是否仅被2、3、5整除,低效bool IsUgly(int number){ while(number%2==0) number/=2; ...原创 2018-08-27 21:01:07 · 156 阅读 · 0 评论 -
剑指offer面试题40--最小的k个数
题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。设计思想一:创建一个结果容器,若放源数据的容器的源数据的个数少于k个,则把所有源数据直接插入结果容器,若源容器的数据数目多于k个,则取完k个后,以后取出的每个元素都要和结果容器的元素最大值比,若比结果容器的最大值大,则该元素替换结果容器的最大值,否则,取源...原创 2018-07-28 10:07:28 · 163 阅读 · 0 评论 -
动态规划---剑指offer面试题46--把数字翻译成字符串
题目给定一个数字,按照如下规则翻译成字符串:0->a1->b...25->z因此一个数字可能有多种翻译。例如,12258有5种不同的翻译,bccfi,bwfi,bczi,mcfi,mzi。请实现一个函数,计算数字有多少种翻译方法。思路可以用递归解决,会发现子问题258 58都重复了。 自然想到可以用动态规划来解决,用f(i)来表示从...原创 2018-08-28 09:01:11 · 348 阅读 · 0 评论 -
剑指offer面试题38字符串全排列
问题1:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。(输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母)分析:这属于输入字符串中可能有重复字符,所有重复的组合只打印一次(比如“aa”,只输出"aa")#include <algo...原创 2018-08-24 16:27:35 · 745 阅读 · 0 评论 -
剑指offer面试题52--两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点。设计思想:先让指向长链表头结点的指针往后走几步,直至两链表头指针指的链表长度相等,再同时向后走,依次比较二者指向的节点,直至找到相同的节点做返回有空再用其他方法做下/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), ...原创 2018-08-24 18:12:57 · 140 阅读 · 0 评论 -
算法篇----求两数的最大公约数和最小公倍数
一、最大公约数与最小公倍数最大公约数,属于数论所探究的内容。最大公约数可以通过下面的三种方法求出来。最小公倍数呢,它与最大公约数的乘机为所求数之积。比如求 x,y的最大公约数和最小公倍数记住这个公式:x*y=最小公倍数*最大公约数这样以来求出最大公约数后就可以求出最小公倍数二、求最大公约数的三种方法①辗转相除法算法流程图代码块:intm...原创 2018-08-01 22:06:14 · 31462 阅读 · 6 评论 -
回溯法-----最优装载问题
回溯法有“通用的解题法”之称,可以系统的搜索一个问题的所有解或任一解。它在问题的解空间中按深度优先策略,从根节点出发,搜索解空间树。算法搜索至解空间树的任一节点时,先判断该节点是否包含问题的解,如果肯定不包含则跳过对以该节点为根的子树的搜索,回到其父节点回溯。否则,进入该子树,继续按深度优先策略搜索。与蛮力算法(穷举法)不同在于:回溯算法多了“观望”,可行则前进,不可行则回溯利用回溯法解问...原创 2018-08-28 09:00:37 · 3594 阅读 · 0 评论 -
排序篇(一)------快速排序
//排序算法-------快速排序,从大到小,并跟踪做标记,程序实现#include <iostream>using namespace st#define Help_Mark 50#define Max_Mark 0x7fffffffvoid print(int n, double A[]){ for (int k = 1; k <= n; ++k) {...原创 2018-08-24 14:33:26 · 208 阅读 · 0 评论 -
回溯算法------图的着色和会场分配问题
图的m着色和会场分配问题是一样的题目描述:给定无向图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。若要求G的每条边的两个顶点着不同颜色,给出所有可能的着色方案。#include <iostream>using namespace std;const int N = 50;int color[N] = { 0 };int trace[N] = { 0 };...原创 2018-09-01 08:06:22 · 1010 阅读 · 0 评论 -
动态规划算法解决二维背包问题
动态规划算法解决二维背包问题http://www.360doc.com/content/13/1209/19/14357424_335780208.shtml一个旅行者有一个最多装j公斤,容积k的背包,现在有n种物品,每件的重量分别是w1,b1,w2,b2,w3,b3,......,wn,bn. 每件的价值分别为v1,v2,...,vn.若的每种物品的件数足够多. 求旅行者能获得的最...转载 2018-09-03 21:15:58 · 4352 阅读 · 1 评论 -
包问题详解:01背包、完全背包、多重背包
参考链接:http://www.cnblogs.com/fengty90/p/3768845.htmlhttp://blog.csdn.net/mu399/article/details/7722810http://blog.csdn.net/xiaowei_cqu/article/details/8191808http://blog.csdn.net/insistgogo/article/det...原创 2018-06-02 09:05:25 · 105 阅读 · 0 评论 -
最大子段和
//本博文仅供博主个人代码笔记之用。至于具体原理,我有空的话会更新,读者可以自行查书。#include <iostream>#include <algorithm>using namespace std;const int N = 50;int main(){int c[N] = { 0 }; //c[]存每个子问题的最大字段和,最后的最大子段必在此中i...原创 2018-08-31 21:22:24 · 183 阅读 · 0 评论 -
贪心算法-----区间覆盖问题
(一)点覆盖区间(雷达/灌溉喷头)题目描述:假设海岸线是一条无限延伸的直线。陆地在海岸线的一侧,而海洋在另一侧。每一个小的岛屿是海洋上的一个点。雷达坐落于海岸线上,只能覆盖d距离,所以如果小岛能够被覆盖到的话,它们之间的距离最多为d。题目要求计算出能够覆盖给出的所有岛屿的最少雷达数目。对于每个小岛,我们可以计算出一个雷达所在位置的区间。 算法实现://2018年6月1...原创 2018-08-31 21:22:03 · 9389 阅读 · 4 评论 -
动态规划_最优二分查找树
一、什么是最优二叉查找树最优二叉查找树:给定n个互异的关键字组成的序列K=<k1,k2,...,kn>,且关键字有序(k1<k2<...<kn),我们想从这些关键字中构造一棵二叉查找树。对每个关键字ki,一次搜索搜索到的概率为pi。可能有一些搜索的值不在K内,因此还有n+1个“虚拟键”d0,d1,...,dn,他们代表不在K内的值。具体:d0...原创 2018-08-31 21:08:48 · 1558 阅读 · 0 评论 -
动态规划算法----最短编辑距离与最长公共子序列
参考:https://blog.csdn.net/u014247371/article/details/26158635(一)先谈最短编辑距离问题描述:编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sit...原创 2018-08-28 09:00:55 · 1366 阅读 · 0 评论 -
贪心算法-----poj 3253 Fence Repair(切木板)
DescriptionFarmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each having some integer lengt...原创 2018-08-26 14:31:51 · 5000 阅读 · 0 评论 -
根据先序序列和中序,后序和中序序列创建二叉树
思考:如何才能确定一棵树?结论: 通过中序遍历和先序遍历可以确定一个树 通过中序遍历和后续遍历可以确定一个树 通过先序遍历和后序遍历确定不了一个树。算法实现:(一)先序和中序重建二叉树,按层次遍历输出#include <iostream>#include <cstdio>#i...原创 2018-08-28 08:44:17 · 16972 阅读 · 1 评论