![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
Eartha1995
这个作者很懒,什么都没留下…
展开
-
剑指offer——和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。时间复杂度O(n^2)的方法对数组中的每一个数组,计算其和后面的每一个数字的和,看是否等于S。 时间复杂度O(n)的方法因为数组是有序的,得用起来啊。可定义两个指针,第一个指针指...翻译 2018-07-25 17:17:08 · 139 阅读 · 0 评论 -
剑指offer——对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 前面做过一道题目—— 二叉树的镜像。根据提示,可以求出左子树的镜像,然后看是否等于右子树,如果相等,则二叉树是对称的。为了不改变二叉树,定义节点指针 pTemp 指向左子树根节点,带入镜像函数求其镜像。用递归比较两个二叉树是否相等。(两个节点的左子树要么都为空...原创 2018-08-10 17:20:25 · 140 阅读 · 0 评论 -
剑指offer——按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<TreeNode*...原创 2018-08-10 20:00:34 · 154 阅读 · 0 评论 -
剑指offer——把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 不要求每行反序,比上一题还要简单。class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > r...原创 2018-08-10 20:26:31 · 157 阅读 · 0 评论 -
图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
作者: dreamcatcher-cx出处: http://www.cnblogs.com/chengxiao/ 排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数,供排序时调...转载 2018-08-14 18:53:38 · 201 阅读 · 0 评论 -
图解排序算法(二)之希尔排序
作者: dreamcatcher-cx出处: http://www.cnblogs.com/chengxiao/ 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。...转载 2018-08-14 20:36:18 · 172 阅读 · 0 评论 -
剑指offer——序列化二叉树
转自https://www.nowcoder.com/profile/6475323/codeBookDetail?submissionId=19293787与https://blog.csdn.net/YF_Li123/article/details/70237074 题目描述请实现两个函数,分别用来序列化和反序列化二叉树 序列化结果存放于数组中class Solu...转载 2018-08-12 15:19:51 · 155 阅读 · 0 评论 -
剑指offer——二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 看到二叉搜索树,想到用中序遍历。class Solution {public: int count = 0; TreeNode* KthNode(TreeNode* pRoot, int k) { ...转载 2018-08-12 16:13:50 · 143 阅读 · 0 评论 -
STL---heap概述,make_heap,sort_heap,pop_heap,push_heap
heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制。而这个实现机制中的max-heap实际上是以一个vector表现的完全二叉树(complete binary tree)。二叉堆(binary heap)就是i一种完全二叉树。也即是。整棵二叉树除了最底层的叶节点以外,都是填...转载 2018-08-12 17:03:39 · 216 阅读 · 0 评论 -
优先队列的一种实现方式——堆
&lt;p&gt;&lt;strong&gt;优先队列&lt;/strong&gt;&lt;/p&gt; 队列是一个操作受限的线性表,数据只能在一端进入,另一端出来,具有先进先出的性质。有时在队列中需要处理优先级的情况,即后面进入的数据需要提前出来,这里就需要优先队列。优先队列是至少能够提供插入和删除最小值这两种操作的数据结构。对应于队列的操作,插入转载 2018-08-12 18:58:14 · 1355 阅读 · 0 评论 -
堆——神奇的优先队列(上) 【经典】
转自 https://www.cnblogs.com/chenweichu/articles/5710567.html原文章 http://ahalei.blog.51cto.com/4767671/1425314 堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上...转载 2018-08-12 19:05:21 · 128 阅读 · 0 评论 -
剑指offer——二叉树的下一个结点
转自https://www.nowcoder.com/profile/2044032/codeBookDetail?submissionId=19265891 题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 结合图,我们可发现分成两大类:1、有右子树的,那么下个结点就是右子树最左...转载 2018-08-10 16:37:32 · 171 阅读 · 0 评论 -
剑指offer——把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 两个重点:(1)两个int型数字拼接起来得到的数字可能会超出int型数字能够表达的范围(大数问题)。可用字符串表示数字。(2)定义一个新的规则来排序数组。时间复杂度O(nlogn)#i...转载 2018-07-23 09:55:17 · 122 阅读 · 0 评论 -
剑指offer——和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...翻译 2018-07-25 20:35:58 · 156 阅读 · 0 评论 -
剑指offer——二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。没考虑这点,我用了除法,每次除以2直至n>1,统计余数为1的次数,再加1就是正数中1的个数(其实这个规则是试出来的,,,最后也通过了,但是内在原理还得想一下)#include<cmath>#include<climits>class Solution {public: int N...翻译 2018-07-15 12:22:07 · 105 阅读 · 0 评论 -
剑指offer——最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 我的思路:利用Partition划分,如果index大于k-1,则令end = index - 1,在左边继续找;如果index < k-1,则将start至index之间的数放进vector,令start = index + 1,再找 k - in...转载 2018-07-20 17:34:27 · 178 阅读 · 0 评论 -
剑指offer——左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! #include<string>class Solution {pub...原创 2018-07-26 10:15:37 · 123 阅读 · 0 评论 -
剑指offer——翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 两次翻转字符串...翻译 2018-07-26 10:19:52 · 153 阅读 · 0 评论 -
剑指offer——连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序...翻译 2018-07-21 10:35:28 · 205 阅读 · 0 评论 -
sort()函数与qsort()函数及其头文件
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e2445db1a8.css"> <div class="htmledit_views">sort()函数...转载 2018-07-26 15:54:03 · 4349 阅读 · 0 评论 -
剑指offer——扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...翻译 2018-07-26 20:56:48 · 148 阅读 · 0 评论 -
剑指offer——数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。将指数大于0,小于0,等于0(底数不为0)的情况分开。其实指数为0的情况不必单独拎出来(不进入if直接返回result为1.0),真正需要考虑的是,底数为0而指数为负的情况,数学上没有意义。书上的做法是设置一个全局变量,检查输入是否有效,这种情况下该bool值为true,返回0。怎...原创 2018-07-16 10:15:18 · 149 阅读 · 0 评论 -
剑指offer——整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。直观的解法:累加1到n之间的每个数中1出现的个数(每次求除以10的余数...转载 2018-07-21 14:29:53 · 208 阅读 · 0 评论 -
堆——神奇的优先队列(下) 【经典】
转自 https://www.cnblogs.com/chenweichu/articles/5710635.html原文章 http://ahalei.blog.51cto.com/4767671/1427156 接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i)...转载 2018-08-12 19:08:44 · 206 阅读 · 0 评论 -
剑指offer——数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路 https://blog.csdn.net/moses1213/article/details/...转载 2018-08-12 19:40:13 · 234 阅读 · 0 评论 -
剑指offer——滑动窗口的最大值
转自 https://www.nowcoder.com/profile/1710251/codeBookDetail?submissionId=17436906与 https://blog.csdn.net/gatieme/article/details/51915826题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5...转载 2018-08-13 11:07:52 · 203 阅读 · 0 评论 -
剑指offer—— 字符流中第一个不重复的字符
转自https://www.cnblogs.com/AndyJee/p/4703171.html题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。 ...转载 2018-08-08 16:44:15 · 145 阅读 · 0 评论 -
剑指offer——删除链表中重复的结点
转自https://www.nowcoder.com/profile/8032527/codeBookDetail?submissionId=14905027 题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5...转载 2018-08-10 16:37:14 · 131 阅读 · 0 评论 -
剑指offer——矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...转载 2018-08-13 15:53:43 · 139 阅读 · 0 评论 -
剑指offer——机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? class Solutio...转载 2018-08-13 19:45:37 · 171 阅读 · 0 评论 -
最高分是多少——华为
华为——最高分是多少 #include<iostream>using namespace std; int main(){ int N, M; char c; int A, B; char co; int k; while (cin >> N >> M) { //...转载 2018-09-02 10:20:20 · 213 阅读 · 0 评论 -
素数对——腾讯
#include<iostream>using namespace std;bool iszhishu(int n){ if(n < 2) return false; for(int i = 2; i < n/2; i++) { if(n % i == 0) return false; ...原创 2018-09-02 10:25:58 · 202 阅读 · 0 评论 -
geohash编码 ——腾讯
题目描述geohash编码:geohash常用于将二维的经纬度转换为字符串,分为两步:第一步是经纬度的二进制编码,第二步是base32转码。此题考察纬度的二进制编码:算法对纬度[-90, 90]通过二分法进行无限逼近(取决于所需精度,本题精度为6)。注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二分中间值属于右区间。算法举例如下: 针对纬度为80进行二进制编码过程:1) 区间...原创 2018-09-02 10:31:33 · 530 阅读 · 0 评论 -
图解排序算法(五)之快速排序
选取一个枢纽,使它左边的值都比它小,右边的值比它大。(假定选数组第一个元素值) int Partition(int* array, int low, int high){ int pivotkey; pivotkey = array[low]; while(low < high) { while(low < high &...转载 2018-08-15 17:30:33 · 447 阅读 · 0 评论 -
图解排序算法(四)之归并排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结...转载 2018-08-15 16:49:38 · 164 阅读 · 0 评论 -
图解排序算法(三)之堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结...转载 2018-08-15 14:55:54 · 163 阅读 · 0 评论 -
剑指offer——孩子们的游戏(圆圈中最后剩下的数)
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去.....翻译 2018-08-08 10:10:10 · 315 阅读 · 0 评论 -
剑指offer——不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 第一步:不考虑进位对每一位相加(异或);第二步:做进位。位与,再向左移动一位;第三步:将前两个步骤的结果相加,过程依然是重复前两步,直至不产生进位为止。class Solution {public: int Add(int num1, int num2) { ...翻译 2018-08-08 12:27:08 · 133 阅读 · 0 评论 -
剑指offer——不能被继承的类
常规解法:将构造函数设为私有函数C++中子类的构造函数会自动调用父类的构造函数,子类的析构函数也会自动调用父类的析构函数。若将一个类的构造函数和析构函数都定义为私有函数,当一个类试图从它那继承的时候,必然会由于调用构造函数、析构函数而导致编译错误。通过定义公有的静态函数来创建和释放类的实例。 缺点:(1)和普通的类型有些不一样,使用起来有点不方便。(2)只能...翻译 2018-08-08 13:43:32 · 198 阅读 · 0 评论 -
剑指offer——数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 bool duplicate(int numbers[], int length, int* dupl...原创 2018-08-08 17:27:02 · 147 阅读 · 0 评论