剑指offer2
文章平均质量分 69
turryiven
这个作者很懒,什么都没留下…
展开
-
算法-Trie树 -字典树
https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html1、单词是否出现/*查询单词是否整体出现 trie tree的储存方式:将字母储存在边上,边的节点连接与它相连的字母 trie[rt][x]=tot:rt是上个节点编号,x是字母,tot是下个节点编号*/#include<cstdio>#include<io...转载 2018-07-04 15:27:25 · 212 阅读 · 0 评论 -
剑指41:数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。用最大堆最小堆方法 插入O(logn) 在队头查找中间数O(1)第一次: 用最大优先队列(默认vector,less)作为最大堆实现 最小优先队列(仿比较函数great...原创 2018-04-26 21:05:42 · 167 阅读 · 0 评论 -
置顶:待整理 STL
首先来看一看int、long、long long的取值范围int 所占字节数为:4 表示范围为:-2147483648~2147483647short int 所占字节数为:2 表示范围为:-32768~+32767long 所占字节数为:4 表示范围为:-214...转载 2018-04-26 20:22:14 · 203 阅读 · 0 评论 -
剑指49:丑数——辅助空间换时间
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路: 用一个数组存储所有已经找到的丑数,始终有一个指针指向最大的丑数,3个指针分别指向 左侧三个数,作用是找到比当前最大数大的最小的数 这三个数分别是m2,m3,m5 意思是第一个数的...原创 2018-05-04 16:24:32 · 126 阅读 · 0 评论 -
剑指40:最小的K个数——快排/利用红黑树
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。方法1:红黑树 插入、删除、查找O(logK) 整体时间O(nlogK)遍历输入,用multiset存储最小的k个数,一旦其中存入K个数后就对头部进行比较 完成插删不更改输入的内容,适合海量数据typedef multiset<int,greater<int...原创 2018-04-26 16:21:38 · 340 阅读 · 0 评论 -
算法-全排列:递归输出/字典序输出/冒泡排序
递归不查重的全排列输出https://blog.csdn.net/sinat_36215255/article/details/78197129输入一个数字 输出从1至该数字的所有全排列的结果剑指offer38同款 #include <cstdio> #include<cstring> #include<algorithm> ...转载 2018-04-23 15:11:46 · 1468 阅读 · 0 评论 -
算法-二叉搜索树和平衡二叉树
红黑树介绍http://www.cnblogs.com/skywang12345/p/3245399.html红黑树和哈希表的对比https://blog.csdn.net/ljlstart/article/details/51335687c++中set的用法https://blog.csdn.net/yas12345678/article/details/52601454转载自https://b...转载 2018-04-26 14:57:29 · 217 阅读 · 0 评论 -
剑指59:滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1},{2,[3,4,2],6,2,5,1}, {2,3,[4,2...原创 2018-05-10 19:45:59 · 161 阅读 · 0 评论 -
剑指48:最长不含重复字符的子字符串——动态规划
题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从'a'到'z'的字符。 思路:最长不重复子串 可用动态规划的思想,设f(i)是从左到右在第i个位置上时 当前最...原创 2018-05-04 12:52:56 · 1554 阅读 · 1 评论 -
剑指47:礼物的最大价值——递归思想/动态规划/循环方式
题目要求:在一个m * n的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(大于0)。从左上角开始拿礼物,每次向右或向下移动一格,直到右下角结束。给定一个棋盘,求拿到礼物的最大价值。例如,对于如下棋盘 1 10 3 812 2 9 65 7 4 113 7 16 5礼物的最大价值为1+12+5+7+7+16+5=53。in...原创 2018-05-04 10:20:08 · 497 阅读 · 0 评论 -
剑指58:翻转单词顺序列——左移字符串
题目描述“student.a am I”,正确的句子应该是“I am a student.”。一一的翻转这些单词顺序思路:先整体翻转 再局部反转class Solution {public: void Reverse(int start,int end,string &str){ while(start<end) { ...原创 2018-05-10 13:24:53 · 161 阅读 · 0 评论 -
剑指46:把数字翻译成字符串——类似回溯法
题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻译成"b",……,11翻译成"l",……,25翻译成"z"。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是"bccfi"、"bwfi"、"bczi"、"mcfi"和"mzi"。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。思路原创 2018-05-03 20:16:39 · 246 阅读 · 0 评论 -
剑指39:数字中出现次数超过一半的数字——快速排序
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。方法1:O(n) 快速排序获得一个坐标 要求获得的坐标刚好是中间数 中间数一定出现次数超过一半class Solution {public: //随机一趟快排 i...原创 2018-04-25 20:59:44 · 374 阅读 · 0 评论 -
32位和64位系统下 数据结构区别
64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。1. 32 位和 64 位C数据类型32和64位C语言内置数据类型,如下表所示:上表中第一行的大写字母和数字含义如下所示:I表示:int类型L表示:long类型P表示:pointer指针类型32表示:32位系统64表示64位...转载 2018-05-03 17:29:19 · 1876 阅读 · 0 评论 -
剑指45:把数组排成最小的数-----sort() ----qsort()
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:使用字符串比较方式 string比较ascii码大小遇不同位或结尾结束。sort函数 自定义一个比较函数 该比较函数是升序的(<) 这样对整数数组中的整数进行O(nlogn)的排序 方法1:sort()+...原创 2018-05-03 15:09:08 · 131 阅读 · 0 评论 -
算法-快速排序
可参考https://www.cnblogs.com/sdlwlxf/p/5131793.html0、一趟快排 单向 最简洁int partition(int a[], int p, int r){ int x = a[r]; int i = p; int j = p; for (; j < r; ++j) if (a[j] < x) ...原创 2018-04-25 14:44:33 · 204 阅读 · 0 评论 -
剑指57:和为S的数字-----和为S的连续正数序列
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。思路:两个指针指向收尾,对于一个递增数组而言,乘积最小和为S的理想情况是左侧保持最小, 对于两个指针位置的数之和 大于S则将尾左移,小于S则将首右移 class Solution {public:...原创 2018-05-09 21:07:44 · 175 阅读 · 0 评论 -
C 快排qsort()
原帖出处:http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.htmlhttps://blog.csdn.net/b2utyyomi/article/details/51506001qsort 功 能: 使用快速排序例程进行排序 用 法: void qsort(void *base, int ...转载 2018-05-02 20:22:22 · 1988 阅读 · 0 评论 -
剑指61:扑克牌顺子
题目描述: 从扑克牌中抽5张,判定是否连续,其中大小王为0,A为1,JQK分别为11-13.思路: 对输入的数组进行升序排列,计算0的个数和非零数间的间隔之和class Solution {public: bool IsContinuous( vector<int> numbers ) { if(numbers.empty()||numbers.s...原创 2018-05-11 15:55:39 · 180 阅读 · 0 评论 -
剑指60:n个骰子的点数
题目描述:n个骰子 打印出点数为S时的可能出现的值得概率思路:设置两个数组轮换 每个数组的第n个位置代表次数为n的次数 对于下一轮的循环中数组第n个位置 是上一轮记录获得的数组中n-1~n-6上和的总和void PrintProbability_Solution2(int number){ ...原创 2018-05-11 19:58:14 · 142 阅读 · 0 评论 -
STL 容器删除元素的陷阱
在网上看到有人总结如下两条:1. 对于节点式容器(map, list, set)元素的删除,插入操作会导致指向该元素的迭代器失效,其他元素迭代器不受影响2. 对于顺序式容器(vector,string,deque)元素的删除、插入操作会导致指向该元素以及后面的元素的迭代器失效https://www.cnblogs.com/Yogurshine/p/4030728.html...转载 2018-05-11 20:55:19 · 401 阅读 · 0 评论 -
背包问题——动态规划
https://www.cnblogs.com/Mychael/p/8282894.html01背包有一个体积为V的背包,有n个物品,每个物品都有体积vi和价值wi,在背包体积范围内,求能桌下的最大价值。这个问题中每个物品只能用一次。设dp[i][j]表示用前i个物品装体积为j的背包。那么第i个物品要么装要么不装:1、如果不装,第i个物品和没有一样,dp[i][j]=dp[i-1][j]2、如果装...转载 2018-06-18 21:17:44 · 330 阅读 · 0 评论 -
调试方式: freopen函数
#include<cstdio>FILE* freopen(const char *, const char *, FILE*);调试时写入freopen("XXX.txt", "r", stdin);代替调试输入关闭freopen的方式:https://blog.csdn.net/u013446688/article/details/44873929在DOS/Win中可以使用CON:...转载 2018-06-21 12:42:59 · 336 阅读 · 0 评论 -
剑指55:二叉树的深度---平衡二叉树判定
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:每个根节点的深度都是左右子树最大值加1/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left...原创 2018-05-08 19:18:15 · 153 阅读 · 0 评论 -
剑指54:二叉搜索树的第K个结点——中序遍历
题目描述:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 24 6 8 中,按结点数值大小顺序第三个结点的值为4。思路:二叉搜索树 使用中序遍历时从左到右是升序排列的一系列数,此时第K大就是从左到右第k个,因此用中序遍历。/*struct TreeNode { int val; st...原创 2018-05-08 18:55:55 · 458 阅读 · 0 评论 -
剑指65:不用加减乘除做加法-位运算
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:加和分为加和和进位 加和通过异或 进位通过与运算和左移 多次进位需要循环 循环结束条件是当每次与获得的进位结果全0class Solution {public: int Add(int num1, int num2) { int sum,temp; ...原创 2018-05-25 12:56:20 · 172 阅读 · 0 评论 -
剑指64:求1+2+...+n 发散性思维——1.static类成员特性与构造函数 2.虚函数 3.函数指针 4.模板求解
转载 2018-05-15 09:14:56 · 179 阅读 · 0 评论 -
剑指63:股票的最大利润
思路: 对于多于2个正数的数组 在遍历到第k个位置时,前k-1个位置中必须找到最小位置 并且判定当前是否具有最大利益。// 面试题63:股票的最大利润// 题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该股// 票可能获得的利润是多少?例如一只股票在某些时间节点的价格为{9, 11, 8, 5,// 7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为...原创 2018-05-15 09:09:31 · 170 阅读 · 0 评论 -
剑指53:数组在排序数组中出现的次数——折半查找——拓展(2)(3)
折半查找专场——————————————————————————————————————题目描述1统计一个数字在排序数组中出现的次数。思路:通过折半查找找到k开始和结束的位置。O(logn)class Solution {public: int GetFirstK(vector<int> data,int k,int start,int end){ //折半查...原创 2018-05-08 10:06:12 · 212 阅读 · 0 评论 -
二叉树中两个节点的最近公共祖先节点
题目:求二叉树中两个节点的最近公共祖先节点https://blog.csdn.net/xyzbaihaiping/article/details/52122885一、该二叉树为搜索二叉树搜索二叉树的特点:任意一个节点的左子树的所有节点值都比该节点的值小,其右子树的所有节点值都比该节点的值大。解决该问题方法:从树的根节点开始和两个节点作比较,如果当前节点的值比两个节点的值都大,则这两个节点的最近公共...转载 2018-05-07 20:46:13 · 2228 阅读 · 0 评论 -
剑指52:两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。思路:2个单链表 先知道两者长度差值 然后长的先遍历到差值的起始位置 再同时后移。时间O(m+n) /*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {pub...原创 2018-05-07 20:32:10 · 122 阅读 · 0 评论 -
排序算法—归并排序
https://www.cnblogs.com/chengxiao/p/6194356.html归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像...转载 2018-05-07 15:32:15 · 127 阅读 · 0 评论 -
剑指51:数组中的逆序对——递归方式的归并排序
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,size<=...原创 2018-05-07 14:22:40 · 202 阅读 · 0 评论 -
剑指50:第一个只出现一次的字符
题目描述在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置思路: 用一个map/unordered_map存或者用一个一维数组 字符和出现次数 然后遍历字符串都存入 再次遍历字符串顺序,从表中找到second值为1的 返回其在数组中的位置(0~len-1)。时间复杂度分析: 用map ...原创 2018-05-06 15:38:00 · 179 阅读 · 0 评论 -
STL—unordered_map 哈希表 与map对比
1、unordered_map介绍https://blog.csdn.net/hk2291976/article/details/51037095介绍1 特性2 Hashtable和bucket模版1 迭代器功能函数1 构造函数12示例代码2 容量操作21 size22 empty3 元素操作31 find32 insert33 at34 erase35 clear36 swap37 示例代码4 ...转载 2018-05-06 15:41:41 · 1036 阅读 · 0 评论 -
剑指42:连续子数组的最大和——动态规划的思想
题目描述一维模式识别中,常常需要计算连续子向量的最大和,例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。(子向量的长度至少是1),返回最大和 遍历加和 一旦加和过程中出现变小的情况 就重新选择起点继续加和 选择一个最小的数做初始化 负数在内存中的补码 是用原码取反加一完成 32位有符号最...原创 2018-04-27 16:22:45 · 278 阅读 · 0 评论 -
【C++】STL——容器适配器
1、stack2、priority_queue #include<queue>https://blog.csdn.net/cstopcoder/article/details/18949583(1)基础介绍priority_queue 优先队列,其底层是用堆来实现的。模板声明带有三个参数:priority_queue<Type, Container, Func...转载 2018-04-27 14:40:24 · 199 阅读 · 0 评论 -
剑指62:圆圈中最后剩下的数字
题目: 0~n-1的n个数排成一个圆圈,从0开始每次从这个圆圈删除第m个数字,然后从删除的数字的下一个数字开始继续直到剩最后1个数字位置。方法1:用list模拟圆圈 的环形链表 每次循环到end()时都手动更新到begin() 效率不高 STL list使用https://blog.csdn.net/zhouzhenhe2008/article/details/7742874...原创 2018-05-11 21:18:35 · 125 阅读 · 0 评论 -
STL:排序函数sort()
作者: AlvinZH出处: http://www.cnblogs.com/AlvinZH/1.sort使用:#include <algorithm> using namespace std;作用:排序时间复杂度:n*log2(n)实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的...转载 2018-05-02 20:15:59 · 258 阅读 · 0 评论 -
剑指44:数字序列中某一位的数字
题目:数字按照0123456789101112131415161718192021…的顺序排列。第5位(从0开始计数)为5,第13位为1,第19位为4…… 求任意第n位对应的数字。思路: 从 0~9的10个数是1位数 10~99是两位数 100~999是三位数 除了1位数之外 其他n位数 占据的顺序排列的位数都是从 pow(10,n-1)~9*pow(10,n-1)...原创 2018-05-02 19:46:32 · 158 阅读 · 0 评论