- 博客(30)
- 收藏
- 关注
原创 剑指offer经典面试编程题--atoi()实现
考察是否具有良好的编程习惯:写代码之前应该考虑所有可能的测试用例。1、要考虑到输入的字符串中有非数字字符和正负号。2、要考虑到最大的正整数和最小的负整数以及溢出。3、要考虑到当输入的字符串不能转换成整数时,应该如何做错误处理。参考代码如下:enum Status { kValid = 0, kInvalid };int g_nStatus = kValid;int StrToInt...
2019-05-13 15:48:44
542
转载 深度神经网络生成模型:从 GAN VAE 到 CVAE-GAN
推荐一篇写得很好的文章。原文链接: https://zhuanlan.zhihu.com/p/27966420
2019-04-26 10:43:55
1193
原创 LeetCode856. 括号的分数 c++(最详细的思路解法!!!)
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: “()”输出: 1示例 2:输入: “(())”输出: 2示例 3:输入: “()()”输出: 2示例 4:输入: “(()(()))”输出: 6提示:S...
2019-03-13 17:03:25
1247
原创 LeetCode1003、检查替换后的词是否有效(最详细的解法!!!)
给定有效字符串 “abc”。对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + “abc” + Y 也同样是有效的。例如,如果 S = “abc”,则有效字符串的示例是:“abc”,“aabcbc”,“abcabc”,“abcabcababcc”。无效字符串的示例是:“abccba”,“ab”...
2019-03-11 21:56:21
508
原创 帮你瞬间理清STL各容器与其排序算法sort()的关系!!!
STL的所有关联型容器都有自动排序的功能(底层结构采取RB-tree),所以不需要用到这个sort算法。至于序列式容器中的stack、queue和priority-queue都有特定的出入口,不允许用户对元素进行排序。剩下的vector、deque和list,前两者的迭代器都属于RandomAccessIterators,适合使用sort算法,list的迭代器则属于BidirectionalI...
2019-03-07 16:46:56
752
原创 一张图帮你彻底了解STL各容器之间的关系!!!
对于序列容器而言,deque(双端队列)和list(双链表)是一般序列容器(如:栈、队列)的底层机制。heap(堆)是一棵父节点的值不大于或者不小于子节点的完全二叉树。priority-queue(优先队列)是以堆为底层机制来实现的。对于关联式容器而言,RB-tree(红黑树)和hashtable(散列表)是关联式容器的底层机制。...
2019-02-28 16:41:27
602
原创 彻底理解面试难点之rb-tree(红黑树)续--对红黑树的插入和删除操作的一些理解!!!
这里主要讲一下对红黑树的插入和删除操作的一些理解对于红黑树的一些相关性质的介绍,上篇已经讲了,这里不再介绍,有需要了解的,可以翻前面的博客看看。1、红黑树的插入操作对于红黑树的元素插入,我们首先要通过查找来确定插入元素在树中所在的位置,毫无疑问,插入节点一定为叶子结点。一般我们会将叶子结点置为红色。然后,我们要看看加入叶子结点之后,整棵红黑树的平衡有没有打破。如果平衡被打破了,我们需要通过...
2019-02-27 21:34:45
495
原创 彻底理解面试难点之rb-tree(红黑树)!!!
红黑树的起源,自然是二叉查找树了,这种树结构从根节点开始,左子节点小于它,右子节点大于它。每个节点都符合这个特性,所以易于查找,是一种很好的数据结构。但是它有一个问题,就是容易偏向某一侧,这样就像一个链表结构了,失去了树结构的优点,查找时间会变坏。 所以我们都希望树结构都是矮矮胖胖的,像这样:而不是像这样: 在这种需求下,平衡树的概念就应运而生了。 红黑树就是一种平衡树,它可以...
2019-02-26 16:02:48
1087
1
原创 LeetCode--946.验证栈序列(最详细的解题思路!!!)
给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), ...
2019-01-22 15:57:02
1419
原创 Leetcode 341. 扁平化嵌套列表迭代器(最详细的思路解法!!!)
给定一个嵌套的整型列表。设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的项或者为一个整数,或者是另一个列表。示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回false,next 返回的元素的顺序应该是: [1,1,2,1,1]。示例 2:输入: [1,[4,[6]]]输出: [1,...
2019-01-17 15:49:07
679
原创 LeetCode 739. 每日温度(最详细的解法!!!)
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30,...
2019-01-16 10:21:13
906
1
原创 173. 二叉搜索树迭代器(最详细的解法!!!)
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 true...
2019-01-16 10:16:06
363
原创 C++ STL之 trait destructor
construct()接受一个指针p,和一个初值value,该函数的用途就是将初值设定到指针所指的空间上。c++ 的placement new 运算子就是用来完成这个任务。destroy()有两个版本,第一个版本接受一个指针,准备将该指针所指之物析构掉。这很简单,直接调用该对象的析构函数即可。第二版本接受first 和last两个迭代器(所谓迭代器就是泛化的指针),准备将[first,last)...
2019-01-14 20:44:51
328
原创 LeetCode--使括号有效的最少添加 (最详细的解法!!!!)
给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。从形式上讲,只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者它可以被写作 (A),其中 A 是有效字符串。给定一个括号字符串,返回为使结果字符串...
2019-01-08 10:18:06
1812
原创 LeetCode -- 二叉树的后序遍历(最详细的解法!!!)
给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]12/3输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解题思路:总体思路分为递归和迭代两种。两者都是依赖于后序遍历的顺序:左、右、根。具体细节看下面代码。代码一:/*递归1、最简单的算法*//*class Solution {public: vector<...
2019-01-02 15:39:43
253
原创 LeetCode--二叉树的先序遍历(c++,最详细的解法!!!)
给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解题思路1、如果采用递归思想的话,只需满足根、左、右输出即可。代码简单清晰,看看就会明白。2、如果采用迭代,则有两种思路:a、一种是利用常规的迭代思想,利用辅助空间栈,按着先序遍历的过程依次将节点输出即可。先看根节点的...
2018-12-19 11:15:14
1181
原创 LeetCode 二叉树的中序遍历 (最详细的解法!!!)
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?**解题思路:**二叉树的中序遍历:左根右。采用递归的思路很简单。直接看代码吧。代码:/** * Definition for a binary tree node. * struct TreeNode { * ...
2018-11-28 10:52:06
670
1
原创 Leetcode 有效的括号 ( 最详细的解法!!!)
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)...
2018-11-20 10:47:30
2202
原创 LeetCode最小栈 (最详细的解法!!!)
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minS...
2018-11-15 21:52:13
2123
转载 static函数 C++
static修饰的函数叫做静态函数,静态函数有两种,根据其出现的地方来分类:如果这个静态函数出现在类里,那么它是一个静态成员函数;静态成员函数的作用在于:调用这个函数不会访问或者修改任何对象(非static)数据成员。 其实很好理解,类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创...
2018-11-13 16:30:34
887
原创 Leetcode:682. 棒球比赛 (最详细的解法!!!)
你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数。2. “+”(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。3. “D”(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。4. “C”(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除...
2018-11-12 20:54:26
1178
1
原创 delete 和 delete[]
delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operator delete来释放内存。delete与new配套,delete []与new []配套。看如下代码:MemTest *mTest1=new MemTest[10];MemTest *mTest2=new MemTest;In...
2018-11-12 10:54:20
751
转载 最坏情况为线性时间的选择算法
算法select可以确认一个有n>1个不同元素的输入数组中第i小的元素。(如果n=1,则select只返回它的唯一输入数值作为第i小的元素。)1.将输入数组的n个元素划分为n/5(向下取整)组,每组5个元素,则至多只有一组由剩下的n mod 5个元素组成。2.寻找这n/5(向上取整)组中每一组的中位数:首先对每组元素进行插入排序,然后确定每组有序元素的中位数。3.对第2步中找出的n/5...
2018-11-09 11:03:08
723
2
转载 local static对象和non-static 对象
C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static 对象,而其它static对象称为non-local static对象。这两者在何时被初始化(...
2018-11-07 21:16:46
1111
原创 介绍几种常用排序算法的思路(干货)
简单算法:冒泡、简单选择、直接插入;改进算法:希尔、堆、归并、快速;从平均情况看,显然最后三种改进算法要胜过希尔排序,远远胜于前三种简单排序算法。从最坏情况看,堆排序与归并排序又强过快速排序及其他算法。...
2018-10-31 17:15:14
434
原创 Overview of GAN(关于GAN的综述)
推荐一篇博客:https://blog.youkuaiyun.com/scarletouyang/article/details/78876526?from=timeline&isappinstalled=0
2018-10-26 15:37:04
2798
原创 LeetCode--下一个更大的元素(四种解法,最详细的解法!!!)
题目描述:给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4...
2018-10-12 15:02:09
2264
原创 快速理解unordered_map相关用途
相关概念:1、unordered_map 是一个关联容器,存储key,value。其中元素并没有特别的次序关系。2、在unordered_map 内部,元素不会按任何的次序排序,而是通过主键的hash值将元素放置到各个槽(Bucket,也可译为“桶”)中,这样就能够通过主键快速的访问各个对应的元素。/*哈希查找*/#include <unordered_map>#includ...
2018-10-12 10:29:25
1015
转载 瞬间帮你理解C++虚函数的作用
虚函数的使用用一句话概括虚函数的作用,再用一个例子让你去体会。1、基于向上类型转换,基类通过虚函数可以对多个子类相似的功能实现统一管理。2、例子:A为基类,B、C为A的同级子类。virtual只需在基类中标识一次,子类无需重复标识。class A{virtual void display(){cout<<“我是A”<<endl;}}class B:publ...
2018-10-11 16:56:02
231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人