自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 字符串的全排列

递归解法,第一个元素拿出来,求出后面的全排列需要注意相同的元素不替换但是只是相同的元素不替换不能保证所有的不重复,还需要去重去重需要先排序,再返回去重index,然后erase即可。class Solution {public: //递归解法 vector<string> Permutation(string str) { vector&...

2018-09-07 23:10:21 342

原创 #最小的k个数

最小的k个数字快排分治的方法进行计算 1. 快排一次得到中间枢纽位置,比较在k-1后面还是前面 2. 若是index>k-1,那么就对[left,index-1]在进行快排 3. 若是indexclass Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> inp...

2018-09-06 20:40:57 147

原创 最大连续子数组和

最大连续子数组和  动态规划,迭代求出以i结尾的最大连续和,i+1结尾的最大连续和时和前一位的状态有关,列出递推式即可求解class Solution {public: int FindGreatestSumOfSubArray(vector<int> array) { //动态规划,其实就是求最大和的连续子序列 //列出递推式,即可做,假...

2018-09-02 21:00:09 185

原创 1到n中1出现的次数

1到n中1出现的次数参考链接https://www.cnblogs.com/lengender-12/p/6876897.html右边第i位出现的1的次数的权重是pow(10,i-1)该位置左边的数字乘以该权重为p1修正值就是需要判断该位置上是否大于1,或者等于1如果大于1,那么还需要增加一个单位的权重如果等于1,需要增加i右边的数字的个数class Solution ...

2018-09-02 13:21:28 164

原创 西安三星电子笔试面试

三星笔试题镜子反射问题面试英文自我介绍介绍一下自己的实习还有项目经历 实习中用到的算法在做实习项目时候主要处理什么问题?遇到哪些困哪?代码行数大概多少行研究生做的项目介绍一下,项目用到的算法是什么?为什么想要定义一个1.5倍的参数?c++的默认构造函数和拷贝构造函数的区别?深拷贝和浅拷贝的区别?字节对齐问题网络的五层模型?对什么方向比较感兴趣(问了一大堆,各...

2018-09-01 23:10:39 6305 7

原创 数组排成最小的数

把数组排成最小的数假定两个想邻的数字m,n如果拼接处mn<=nm那么m在n的前面,定义为m<=n;否则定义为nclass Solution {public: string PrintMinNumber(vector<int> numbers) { sort(numbers.begin(),numbers.end(),compare); ...

2018-09-01 22:54:29 165

原创 寻找丑数

寻找丑数 丑数一定是前面的某个数乘以2或者3或者5得到的,在这个基础上可以进行数学归纳法证明其正确性。为了能够迭代的构造这个数列,需要记录当前2,3,5作为乘数因子大于数组最末端的数组的位置 1. 设置p2,p3,p5均是0, 2. 设置当前数组第一个元素为1 3. 迭代开始,每次都保证array[p2]*2,array[p3]*3,array[p5]*5都大于array的末端元素,取最...

2018-09-01 22:32:50 230

原创 左旋转字符串以及扩展

翻转字符串 翻转一个字符串中的单词顺序,只需要 1. 翻转字符串 2. 翻转单词class Solution {//左旋转某个有序的东西,只需要先反转整体,让内部元素整体归位,然后在局部反转,让内部元素的每个元素归位public: string ReverseSentence(string str) { int begin=0; ...

2018-08-23 14:39:17 140

原创 二叉树的下一个节点

思路:主要是分为三种情况 1. 该节点有右子树 2. 该节点无右子树,无父节点 3. 该节点无右子树,有父节点,是父节点的左子树 4. 该节点无右子树,有父节点,是父节点的右子树class Solution {public: TreeLinkNode* GetNext(TreeLinkNode* pNode){ //节点不存在,返回NULL ...

2018-08-23 14:38:22 196

原创 判断对称二叉树

思路:对于一个树,如果它的左右子树是成镜像的,那么就说明这个树是对称二叉树。 一个树与另外一个树是否是镜像,首先需要判断两个根节点是否一致(都为NULL或者都不为NULL相等),在根已经一致的情况,分别递归判断第一个树的左子树和第二个树的右子树,第一个树的右子树和第二个树的左子树。class Solution {public: bool isSymmetrical(...

2018-08-22 21:39:27 721

原创 两个链表第一个相交的点

思路一:两个链表长度,长的先走比短的多的那部分,再两个一起走,相遇就是那个节点//求出两个链表的长度,然后让一个先走diff步,两个一起走相遇就是第一个公共节点class Solution {public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pH...

2018-08-22 19:42:50 110

原创 数组中的逆序对

采用归并排序的思路,参考剑指offer,但是注意剑指offer是有错误的,那就是在递归中没有对原数组排序。算法如下所示,代码注释中有说明。class Solution {public: long long InversePairs(vector<int> data) { int *copy=new int[data.size()]; lo...

2018-08-22 19:39:44 102

原创 判断一个有序数组中一个数字重复出现的次数

判断一个有序数组中一个数字出现的次数 首先可以想到二分法,但是二分法只是找到其中一个的位置,这个时候不能确定个数 为了能够确定个数,可以有一个简单的方法,一个一个往前数,一个一个往后面数,直到数到边界为止,代码如下class Solution {public: int GetNumberOfK(vector<int> data ,int k) { ...

2018-08-21 21:49:39 4404

原创 如何判断一个树是否是平衡二叉树

判断一个树是二叉平衡树 平衡二叉树十是一种高度自平衡树,它的任何一个结点的左右子树的高度之差不会查过1。递归方法:从定义个就可以写出一个递归的解法,先求左右子树是否平衡然后,再判断自己是否平衡。代码如下class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pR...

2018-08-21 21:07:27 2676

原创 查找在一个序列中只出现一次的数字

主要考察异或运算 1. 全部异或得到结果的二进制是1的那一个位置 2. 两个数字必然在那一位也是为1,为0 3. 全部的数字的二进制同样位置上为1的进行异或,得到一个结果 4. 全部的数字的二进制同样位置上为0的进行异或,得到另一个class Solution { //先全体异或,找到这个结果是1的位置index,index从右边往左边(低位到高位,从0...

2018-08-16 20:59:04 693

原创 连续子序列的和为s的数字及其扩展

连续子序列和为s的数字 为了能够得到线性时间复杂度的算法,可以考虑两个标记,一个指向头部,一个指向尾部 1. 和大了就++head 2. 和小了就–tailclass Solution { //和为sum的两个数字,因为这是个有序的序列,自然需要利用public: vector<int> FindNumbersWithSum(vector&lt...

2018-08-16 20:55:25 674

原创 五中基础排序算法实现细节

由于时间仓促,本文先展示实现代码,后续抽空进行思路的补充。class Solution {public: /** * @param A: an integer array * @return: nothing */ void sortIntegers(vector<int> &A) { // wri...

2018-08-09 20:31:21 257

原创 如何计算1+2+3+...+n的值

利用函数数组 不能使用递归,但是可以使用两个函数的数组,随着n到0选择基准函数,其他时候选择调用下降函数//使用一个函数指针数组,装下递归基函数和递归下降函数//关键在于如何选择函数,在0时候选择基准,非0时候选择下降typedef int (*fun) ( int); //定义函数指针类型class Solution {public: static int S...

2018-08-07 19:36:06 3059

原创 不用加减乘除做加法

不用加减乘除做加法 不用加减乘除做加法其实就需要利用位运算来进行,有两点需要注意1. sum=num1^num2;2. carry=(num1&num2)<<1;class Solution {public: int Add(int num1, int num2) { while(num2!=0){ ...

2018-08-07 17:58:30 99

原创 完成字符串到整数的转换

字符串到整数的转换 可以考虑对于原有的atoi的实现,不仅仅需要计算得到数值,对于其中的特殊情况需要进行仔细斟酌,区分,提高程序的鲁棒性。首先字符串首字符可以是正负首字符是正负的时候,后续必须得有非空的数字字符串,否则返回0,其余遇到非数字字符的情况都是判错,返回0。对于”0”返回0,为了区分两种0,需要添加一个全局或者传入的区分变量,本文不讨论该种情况,但是需要知道。空字...

2018-08-07 17:32:11 188

原创 最低公共祖先

最低公共祖先方法一:递归实现 对于树中两个节点而言,最低公共祖先LCA其实就是该节点左边和右边分别包含A,B两个节点。只有A,B分别在其左右子树中。首先判断该节点是否非空,空返回NULL,表示既没有A,有没有B如果该节点本身是A,或者B中的一个则返回该节点递归的判断该节点的左右子树,如果左右子树都不是返回NULL,说明左右子树分别包含A,B那么就可以返回root。(注意,这...

2018-08-06 22:42:53 486

转载 c++重载,覆盖,重写的区别

转自:https://blog.csdn.net/zx3517288/article/details/48976097 基本概念: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。示例:class A{pub...

2018-08-06 13:18:54 416

原创 用一个栈实现另一个栈的排序

用一个栈实现另一个栈的排序 思路:为了实现一个栈的从大到小的排序(栈顶到栈底),需要考虑一个事实,如果我们每次都往辅助栈中存放当前剩余的最大的值,最后直到当前栈空了,再把辅助栈转移回去就可以完成排序。 关键:如何每次把当前的最大的值存入辅助栈。只要弹出一个数,如果辅助栈为空,push,如果弹出值大于辅助栈顶,则弹出辅助栈直到遇到小于或等于的push。如果小于等于就push。...

2018-08-01 16:53:39 565

原创 递归实现栈的翻转

递归实现栈的翻转 主要考察对于递归的理解,其实这个问题最简单的方法当然是设计一个空的栈来存储这些元素,一次达成逆序,但是题目要求使用递归的方式实现逆序,因此需要借助函数返回栈来充当这个这个栈的作用,实际上依然是借助了一个栈,但是这个栈是函数帧上的栈。思路如下取出一个栈的最底下的那个元素,存放在函数帧中,也就是递归中的每层返回值每次取出一个以后,逆序当前的剩余栈,然后push刚才的那个值...

2018-07-30 23:23:29 696

原创 两个栈形成一个队列

两个栈形成一个队列 1.栈先进后出,两个栈就可以先进先出 2. 从一个栈进,然后转移到另一个栈中,然后再出。代码如下。class MyQueue {public: MyQueue() { // do intialization if necessary } /* * @param element: An integer...

2018-07-26 22:03:35 219

原创 O(1)时间getMin()的特殊栈

O(1)时间getMin()的特殊栈  为了能够满足时间复杂度,必然是需要空间的付出,所以可以考虑利用两个栈来实现这个特殊的栈  一个数据栈保存所有数据,一个最小数栈保存对应状态下的最小值。代码如下 `` class Solution { public: void push(int value) { if(stackMin.emp...

2018-07-25 22:41:52 184

空空如也

空空如也

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

TA关注的人

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