自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 leetcode 不同路径

目前正在学习动态规划class Solution {public: int uniquePaths(int m, int n) { int dp[100][100]; for(int i=0;i<m;++i) { for(int j=0;j<n;++j) { ...

2019-09-05 10:17:35 148

原创 LeetCode 环形链表

使用快慢指针,快的一次走两步,慢的一次走一步,如果有环,快的会追上慢的。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */...

2019-08-26 20:15:38 197

原创 括号匹配(面试)

class Solution {public: bool isValid(string s) { if(s.empty()) { return true; } map<char,char> m_str={{')','('},{'}','{'},{']','...

2019-08-23 16:12:04 227

原创 合并两个有序链表(面试)

/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ...

2019-08-23 16:03:10 182

原创 C++ 反转链表(面试)

题目描述/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Lis...

2019-08-23 15:50:56 364

原创 排序算法—计数排序

整理计数排序的程序#include<iostream>#include<vector>#include<algorithm>using namespace std;void CountSort(vector<int> &vec, int max){ int len = vec.size(); if (len < 1...

2019-08-22 22:13:15 142 1

原创 C++ 排序算法——桶排序

马上要秋招了,把刚学的算法整理一下,方便用手机看,就不啰嗦写原理了#include<iostream>#include<vector>#include<algorithm>using namespace std;void BucketSort(vector<int> &vec, int max){ int len = ...

2019-08-17 20:40:02 502

原创 给定一个正整数,找到由相同数字组成的下一个更大的数字

输入描述:输入一个整数,整数位数小于100输出描述:比输入的整数大的最小的整数,找不到则返回-1,示例1:输入314,输出341。参加了一个现场笔试的一道题目,方法可能比较暴力,但是没有想到其他好方法 :( 。。。。。。。。。使用字符串进行解答,将输入的数字的每一位存入一个vector中,然后利用递归将所有数字进行组合成新的并且存储到一个vector<string...

2019-04-12 18:10:57 4187

原创 数据结构_希尔排序

#include<iostream>#include<vector>using namespace std;void ShellSort(vector<int> &seq){ int i, j;//复杂度O(n^(3/2)) auto len = seq.size(); int increment = len; int...

2019-04-02 21:19:20 163

原创 将字符串中小写字母移到前面,大写字母移到后面,并保证顺序不变

题目将字符串中小写字母移到前面,大写字母移到后面,并保证顺序不变,要求不使用额外空间本题使用冒泡排序的思想进行操作,以字符串“abCDefG”为例,进行排序,从后向前遍历,首先发现G,不进行操作,继续向前,当发现f是,如果f前面是大写字母则进行交换,否则不动,由于前面是e所以不动,再向前,前面是D,此时交换e和D,再遍历继续交换,e和C,最后停止,此时顺序为“abeCDfG”,以此类...

2019-03-30 11:12:03 2800

原创 strcpy用法

std::stycpy 定义于头文件<cstring> char*strcpy(char*dest,constchar*src);复制src所指向的字符串,包含空终止符,到首元素为dest所指向的字符数组。若dest数组不够大则行为未定义。若字符串重叠则行为未定义。 参数 dest - 指向要写入的字符数组的指针...

2019-03-29 18:56:09 1058

转载 C++ typedef

转自知乎的一段解释:作者:知乎用户链接:https://www.zhihu.com/question/29798061/answer/144423125来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。不太想谈#define, 在题主的例子的这种用法里, 它就是个文本替换工具, 预处理器完成的, 无脑替换, 跟word里的replace一模一样, ...

2019-03-26 15:57:57 157

原创 剑指offer_ 正则表达式匹配

题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配此题如果在字符串为空并且模式串为空的情况下,则返回true;在字符串不为空,模式串为...

2019-03-17 14:26:38 96

原创 数据结构_快速排序

快速排序是冒泡排序的升级,都属于交换排序类。快排的基本思想是:通过一趟排序将待排序记录分割成两部分,其中一部分的每个关键字都比另一部分记录的关键字小,则可以分别对这两部分记录继续进行排序,已达到整个序列有序。其复杂度最优的情况下为O(nlogn),最坏的情况下为O(n^2)。代码如下:void QuickSort(vector<int> &seq, int l...

2019-03-12 16:59:35 224

原创 剑指offer_ 翻转单词顺序

题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?首先利用这一个...

2019-03-12 14:33:31 113

原创 剑指offer_ 和为S的两个数

题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。题目所给数组为递增排序,所以设置两个指针,分别从头和尾向中间逼近,满足和为sum的两个数之间的距离越远,则其乘积越小,复杂度O(n)。代码如下: vector<int&gt...

2019-03-11 15:44:59 106

原创 剑指offer_ 数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字现在数组中有两个数字只出现1次,直接异或一次只能得到这两个数字的异或结果,但光从这个结果肯定无法得到这个两个数字。因此我们来分析下简化版中“异或”解法的关键点,这个关键点也相当明显——数组只能有一个数字出现1次。设题目中这两个只出现1次的数字分别为A和B,如果能将A,B分开到二个数组...

2019-03-10 17:48:15 109

原创 剑指offer_ 平衡二叉树

题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。平衡二叉树的左右子树高度差只能是1,0,-1,如果绝对值大于1,则不是AVL树。所以先递归获取左右子树的高度,如果左右子树的差的绝对值大于1,则返回false。代码如下:class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { ...

2019-03-10 11:05:03 98

原创 剑指offer_ 二叉树的最大深度

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。使用深度优先遍历思想,利用二叉树的前序遍历,先遍历左子树,再遍历右子树,统计两个子树的深度值,取最大值作为当前根节点的最大深度。代码如下:class Solution {public: int TreeDepth(TreeNode* pRoot...

2019-03-10 10:32:25 105

原创 数据结构_归并排序

归并排序就是利用归并的思想实现的排序方法,它的原理是假设初始序列含有n个记录,可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长须为2或1的有序子序列;再两两归并,,,,如此重复,直到得到一个长度为n的有序序列为止,这种称为2路归并排序。代码如下:void MergingSort(vector<int> &data, vector<i...

2019-03-06 20:00:14 202

原创 数据结构_直接插入排序

直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录增加1的有序表如:{7,8,9,4,5,6,1,2,3,0},首先从8开始遍历,8前面的元素7比8小,继续遍历到9,7和8都比9小,继续遍历到4,9比4大,4暂的存,9后移,9的位置空出来,8比4大,8移动到9的位置,8的位置空出来,7比4大。7后移到8的位置,7的位置空出来,4前面的元素遍历结束,将暂存的4放...

2019-03-05 21:49:12 165

原创 数据结构_简单选择排序

简单选择排序算法就是通过n-i次关键字间的比较,从n-i+1个记录选出关键字最小的记录,并和第i(1&lt;=i&lt;=n)个记录交换。代码如下:void swap(vector&lt;int&gt; &amp;L, int i, int j){ int tmp = L[i]; L[i] = L[j]; L[j] = tmp;}void SelectSort(vector&...

2019-03-04 19:37:19 198

原创 数据结构_堆排序实现

理解学习堆排序后,自行敲了一遍代码,做个记录,以下为大顶堆其时间复杂度最好与最坏的情况下均为O(nlogn)。堆排序:(假设利用大顶堆)将待排序的序列构成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点,将它一走,其实就是将其与对数组的末尾元素交换,此时末尾元素就是最大值,然后将剩余n-1个序列重新构成一个堆,就会得到n个元素中的次大值,反复执行,就可以达到一个有序序列。#incl...

2019-03-04 19:01:02 293

原创 剑指offer_把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。代码如下:class Solution {public: string PrintMinNumber(vector&lt;int&gt; numbers) { if (n...

2019-03-04 15:06:36 82

原创 剑指offer_ 最小的K个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。构建大顶堆排序进行实现,代码如下:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { ...

2019-03-04 10:50:30 105

原创 剑指offer_ 整数中1出现的次数

题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。考虑求1到所给整数n中包含1的数字的个数,当n的个位数为1时,一...

2019-03-03 19:35:53 134

原创 剑指offer—数组中出现次数超过一半的数字

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目要求查找出出现次数超过一半的数字,考虑使用map容器,通过设置&lt;数字,出现次数&gt;键值对来求出每个数字出现的次数。之后再遍历map,找出那个出现次数超过一半...

2019-03-02 15:03:50 104

原创 剑指offer_ 二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。题目中所给的是一颗二叉搜索树,在此树中:若左子树不空,左子树均小于根节点;若右子树不空,右子树均大于根节点。要求转换为一个排序双向链表,且不能采用额外节点空间,那么采用中序遍历,将二叉搜索树中的节点按元素值从小到大的顺序压入容器中,然后将容器进行遍历,...

2019-03-02 09:48:52 97

原创 剑指offer_ 二叉树中和为某一值的路径

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)题目要求的路径是从根节点到叶子节点的路径。即需要遍历整棵树,而且需要首先遍历根节点,所以采用前序遍历。首先定义一个存储所有路径的vector<vec...

2019-02-27 21:58:00 139

原创 剑指offer_ 二叉搜索树的后序遍历序列

二叉搜索树的特点为:1、左子树的值均比根节点的值小。2、右子树的值均比根节点的值大。后序遍历特点:最后一个元素为二叉树的根节点。根据以上特性,通过与最后一个元素的比较,将序列的左右子树区分开来例如:2、4、3、6、8、7、5 根节点为5循环遍历,当遍历到6时,比5大,跳出循环,从0到3为左子树部分,从6到8为右子树部分。继续递归遍历,若左右子树均遵循这个规则...

2019-02-25 21:32:53 231

原创 剑指offer_ 从上往下打印二叉树

按题目所给出的要求,此题为二叉树的层序遍历,借助队列来实现。首先将根节点压入队列,然后进行循环,队列不为空则弹出队列头,pop队列头,并存储节点信息,然后压入此节点的左右子树,然后再弹出队列头,pop队列,依次循环,借助队列先进先出的特点即可将二叉树从上向下从左到右的将节点信息取出来打印。代码如下:/*struct TreeNode { int val; struct T...

2019-02-25 14:12:06 116

原创 剑指offer_ C++ 栈的压入、弹出序列

建一个辅助栈,模拟序列1按序列2顺序的出栈,如1,2,3,4,5和4,5,3,2,1序列1为空时,首先压入1,序列2的首元素4,不等于当前栈顶,继续压入2,依然不等,继续压入3.........压入4,当前栈顶元素等于序列2的首元素4,此时将4弹出,序列2元素索引加1,此时指向5。此时栈顶元素为3,不等于5,继续压入序列1的5元素,此时相等,则将栈顶元素5弹出,序列2的索引加1,此时...

2019-02-23 20:37:50 909 1

原创 剑指offer_ 二叉树的镜像

采用递归方法:依次从根节点开始交换左右子节点,递归到叶节点。代码如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};class Solution {pu...

2019-02-21 21:12:45 192

原创 剑指offer_ C++ 树的子结构

主要分为两段代码,一是递归A,来查找是否与B的根节点相同的节点,成功后,进入第二段代码,进行A和B的同时递归比较。通过递归遍历A和B两棵树来进行检查,首先考察A和B的根节点是否相同,如果相同则可以继续向下比较,否则则递归比较A的左子树部分是否有与B的根节点相同的节点,若左子树失败,则进行A的右子树的递归查找。若对B的根节点查找成功,则进入A和B同时递归的程序,对A和B的左右子树同时进行...

2019-02-20 19:36:47 312

原创 剑指offer_ 合并两个排序的链表

采用递归的方法,依次遍历比较两个链表的数值的大小,并存入按递增的顺序存入新的链表,代码如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Mer...

2019-02-20 18:26:33 135

原创 剑指offer_ c++ 输入一个链表,反转链表后,输出新链表的表头。

利用栈作为中间存储,进行链表的反转,将压入的数据按先进后出的顺序弹出依次赋给链表再输出表头pHead。代码如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: Li...

2019-02-18 19:57:03 610

原创 剑指offer_ 输入一个链表,输出该链表中倒数第k个结点。

考虑输出单链表的倒数第n个节点,单链表不能回头,所以我考虑先遍历一遍链表,得到链表的节点个数count,再进行第二遍遍历,遍历到count-k个节点处,即为链表的倒数第k个节点。同时要注意k可能大于count,此时输出为空。代码如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x)...

2019-02-18 19:19:32 260

原创 剑指offer_ 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

计算机中数据以二进制形式存储,正数以原码形式存储,负数以补码形式存储,int整型,占四个字节,每个字节8位,共32个二进制位。将所给的数字n依次与index=1相与,并且将index逐次左移,如果相与不为0,则表示n的此位为1,否则为0。代码如下:class Solution {public: int NumberOf1(int n) { in...

2019-01-21 19:58:39 229

原创 剑指offer_ 变态跳台阶

与跳台阶题目不同,跳台阶题目为斐波那契数列,而此题目中青蛙可以一次挑n以内大于0任意数的台阶数,所以当跳n级台阶时,需要将前n-1次跳台阶数的跳法全部加起来,再加上一个一下跳到第n级台阶的一种跳法。使用两层for循环,将前n-1次的台阶跳法全部加起来再加1得到第n层的。代码如下: int jumpFloorII(int number) { if(number&lt...

2019-01-20 21:24:18 141

原创 剑指offer_ 斐波那契数列

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39开始使用递归思想进行编写,代码如下所示,结果严重超时, int Fibonacci(int n) { if(n<2) { return n==0?0:1; } ...

2019-01-15 21:06:38 136

3D环境开发与搭建

u3d环境基础学习,快速入门,通过细致的讲解使新手尽快的熟悉

2017-11-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除