- 博客(98)
- 收藏
- 关注
原创 好久不见,回来看看七年前的你
我时常把这比喻成是一个高级的监狱,管吃管住,每月给点窝囊废,想买的东西还是那么遥远~真的特别真实,研究生毕业的时候,是连想都不敢想,简历都没敢投~那时,一起在网上记录文字的人,也都慢慢失去了联系~
2024-05-07 17:44:42
242
原创 写在2017年秋招之后的话
2017年初定下的小目标工作终于尘埃落定,所经历的一切也总算有了回报。请教我本科老师,本科老师说了一句话好经典,说现在这个社会,真的特别讲道理,付出就会有回报,累没关系,只要让我觉得我的付出是值得的就行,能给我一定的回报就好,真的是这样子的。虽然我也没有像多少大牛一样,学的多牛,毕竟的跨专业自学,但是结局也还好,进了京东,成快递小哥了。从九月初开始准备笔试,比较大的互联网公司基
2017-10-22 16:51:23
1118
原创 美团校招笔试题
大富翁游戏(类似于变态跳青蛙问题)#include using namespace std;int main(){ int n, ans; cin>>n; if(n<0) return 0; ans=1; for(int i =1;i<n;i++) { ans*=2; } cout<<
2017-08-30 16:29:04
1118
原创 通俗易懂看RB-tree(二)
RB-tree结点设计codes:typedef bool rb_tree_color_typeconst rb_tree_color_type rb_tree_red=false;const rb_tree_color_type rb_tree_black=true;struct rb_tree_node_base { typedef rb_tree_color_typ
2017-08-28 21:28:38
488
原创 通俗易懂看RB-tree(一)
RB-tree首先RB-tree是一颗二叉搜索树。 特点: 结点非红即黑。 根节点为黑。 如果结点为红,则子结点必为黑。 任一结点至NULL的任何路径,所含黑结点树必须相同。 由规则4可知:新增结点必为红。 由规则3可知:新增结点之父结点必为黑。插入结点状况1:状况1:S为黑且X为外侧插入,对此情况,我们先对P,G做一次单旋转,并更改P,G颜色,即可重新满足
2017-08-28 21:13:59
664
原创 动态规划-直方图内最大矩形
题目来源:直方图内最大矩形有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。动态规划方法,构建动态数组dp[i][j],含义是从第i个元素到
2017-08-26 21:57:02
2602
原创 剑指offer-二叉搜索树中的第k个结点
题目:给定一颗二叉搜索树,请找出其中的第k大的结点。二叉搜索树的中序遍历是数值递增排序的,因此只需要中序遍历二叉搜索树,就可找到第k大的结点。struct BinaryTree{ int data; BinaryTree *left; BinaryTree *right;};//二叉搜索树的第K个结点BinaryTree *KthNode(B
2017-08-25 21:20:14
307
原创 动态规划-最优编辑
题目:对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。根据动态规划特点,定义二维数组来实现转化代价的
2017-08-25 13:55:56
568
原创 剑指offer-按之字形顺序打印二叉树
题目:实现一个函数按照之字形顺序打印二叉树。struct BinaryTree{ int data; BinaryTree *left; BinaryTree *right;};void print(BinaryTree *pRoot){ if(pRoot==NULL) return; stack level[2];
2017-08-25 12:32:56
303
原创 剑指offer-把二叉树打印成多行
题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。struct BinaryTree{ int data; BinaryTree *left; BinaryTree *right;};void print(BinaryTree *pRoot){ if (pRoot == NULL) return; queue nodes;
2017-08-25 09:47:38
247
原创 剑指offer-对称的二叉树
题目:判断二叉树是否是镜像的。//对称的二叉树;bool isSymmetrical(BinaryTree *pRoot){ return isSymmetrical(pRoot,pRoot);}bool isSymmertrical(BinaryTree *pRoot1, BinaryTree *pRoot2){ if (pRoot1 == NULL&&pRoot2
2017-08-24 19:57:42
230
原创 剑指offer-中序遍历的下一个结点
题目:求二叉树中序遍历的下一个结点。根据二叉树中序遍历的特点,中序遍历是从小到大排序的,以左根右顺序依次遍历二叉树。/找出中序遍历的下一个结点struct BinaryTree{ int data; BinaryTree *left; BinaryTree *right; BinaryTree *parent;};BinaryTree *GetNext(Bin
2017-08-24 19:46:33
321
原创 剑指offer-删除链表中重复的结点
题目:在排序链表中,删除重复的结点。struct ListNode{ int data; ListNode *next;};void deleteDuplication(ListNode **head){ if (head == NULL || *head == NULL) return; ListNode *preNode = NULL; ListNode
2017-08-24 18:41:13
251
原创 剑指offer-链表中环的入口点
题目:一个链表中包含环,如何找出环的入口结点。ListNode *MeetingNode(ListNode *head)//找出环中的一个结点,利用快慢指针来实现;{ if (head == NULL) return NULL; ListNode *slow = head->next; ListNode *quick = head->next; if (slow ==
2017-08-24 15:26:34
317
原创 剑指offer-构建乘积数组
题目:给定一个数组A[0,1,2...n-1],请构建一个数组B[0,1,2...n-1],其中B中的元素B[I]=A[0]*A[1]**A[I-1]*A[I+1]***A[n-1]。不能使用除法。void multiply(const vector &array1, vector &array2){ int length1 = array1.size(); int leng
2017-08-24 10:32:15
230
原创 关于动态规划算法
在暴力搜索基础上,增加了记忆机制而减少了时间复杂度,动态规划是一种以空间换时间的快速算法。经典例题:找零钱问题:用n种货币,组成aim的钱数,有多少种方法;法一:初始化一个二维数组dp[n][aim],行数为n,列数为aim。dp[i][j]含义为用penny[0...i]的货币组成j的钱数有多少种方法。递归公式:dp[i][j]=dp[i][i-penny[i]]+dp[
2017-08-13 15:35:38
293
原创 剑指offer-丑数
题目:因子只包含2,3,5的数称作丑数。1为第一个丑数。求第1500个丑数;int Min(int x,int y,int z ){ int min=x<y? x:y; return min<z? min:z; }//丑数int GetUglyNumber(int index){ vector vec; vec.push_back(1); int i=0;
2017-08-08 09:54:22
240
原创 剑指offer-两个链表的第一个公共点
题目:输入两个链表,输出两个链表的第一个公共结点。分析:由于单链表的结点,每个结点只有一个next指针,所以 两个链表的连接形式像是一个Y型。经分析:若两个链表存在公共结点,则公共结点位于链表尾部。若我们从链表尾部开始往前比较,最后一个相同的结点就是我们要找的结点。可以在单链表中,只能从头结点开始按顺序遍历,最后才能到达尾结点。类似于后进先出。联想到可以用栈来解决该问题。分别把
2017-08-08 09:30:02
281
原创 回文链表判断
题目:123454321,为回文串判断已知链表是否是回文链表。struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Palindrome {public: bool isPalindrome(List
2017-08-07 15:57:28
601
原创 STL源码剖析
mapmap特性是,所有元素都会根据元素的键值自动被排序。map的所有元素都是pair,同时拥有实值(value)和键值(key).pair的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值。不能随意修改元素键值,因为map元素的键值关系到map元素的排列规则。任意改变map元素键值会严重破坏map组织。但是可以修改元素的实值。因为map元素的实值并不影响map
2017-08-07 14:54:37
289
原创 Effective C++ 要点整理(一)
Effective C++ 学习笔记条款07:为多态基类声明virtual析构函数 C++曾明确指出,当派生类(derived class)对象经由一个基类(base class)指针被删除,而该基类还带着一个non-virtual析构函数,其结果未有定义-实际执行时通常发生的是对象的派生成分没被销毁。而其基类成分通常会被销毁,于是造成一个诡异的“局部销毁”对象。这会造成资源泄露、
2017-08-06 09:33:50
561
原创 剑指offer-排序数组中数字出现的次数
题目:求排序数组中某个数字出现的次数。二分查找的加强版。int GetFirstK(int *data, int length, int k, int start, int end)//数组首地址,数组长度,数字,开始查找位置,结束查找位置;{ if (data == NULL || length == 0 || start > end) return 0; int mid
2017-08-05 10:38:04
223
原创 剑指offer-数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。归并排序的运用。int InversePairs(int *data, int length){ if (data == NULL || length < =0) return 0; int *copy = new int[length];
2017-08-04 20:41:06
238
原创 剑指offer-和为s的两个数字VS和为s的连续正数序列
题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使他们的和正好为s,如果有过对数字的和等于s,输出乘积最小的一对;/所给数组为排序数组,若有多组,数组乘积最小的一组//而距离越远乘积越小,所以从两端开始对数组进行遍历。bool FindNumbersWithSum(int data[], int length, int sum, int *num1, int *n
2017-07-31 15:36:42
500
原创 剑指offer-数组中只出现一次的数
题目:一个整形数组中出了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现了一次的数字,要求时间复杂度为O(n),空间复杂度为O(1)。用异或知识解答,一个数异或本身结果为0,所以遍历整个数组,数组中所有数组相异或,相同数字相异或相抵消,结果为0,则最后结果为两个不同的数相异或的值。保存最后所得值,以该值最后一位为标准,将数组分成两组,0一组,1一组,则两个不同的数字被分到不同
2017-07-31 10:43:25
238
原创 剑指offer-不用加减乘除求和
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:用位运算,二进制的运算过程,作和:不算进位,全1为0,全0为0,0 1 为1 ,相当于异或;进位:全1为1,其余为0,而且要左移一位重复上述步骤没有进位即停止计算。class Solution {public: int Add(int num1, int num2) {
2017-06-29 11:28:14
314
原创 剑指offer-求前n项和
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)看的大神的代码。脑洞太大了,服的666。class Solution {public: int Sum_Solution(int n) { bool a[n][n+1]; return sizeof(a)>
2017-06-29 10:30:48
299
原创 关于位运算-快速幂
&运算通常用于二进制取位操作,例如一个数&1的结果就是取二进制的最末位。还可以用来判断奇偶性。x&1==0;x为偶数x&1==1;x为奇数
2017-06-29 10:00:56
910
原创 剑指offer-数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。快速幂的应用,降低时间复杂度。class Solution {public: double Power(double base, int exponent) { double ans=1; int n; if(exponent>0) {
2017-06-29 09:52:03
294
原创 剑指offer-翻转单词顺序
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?class Solu
2017-06-26 22:03:19
212
原创 剑指offer-左旋字符串
参考《编程之法》;这里可以用reverse函数实现,但是面试的时候,万一面试官不让用reverse就得自己实现了。class Solution {public: string LeftRotateString(string str, int n) { int len=str.length(); if(0==len||0==n) return st
2017-06-26 17:07:32
240
原创 剑指offer-连续子数组的最大值
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)
2017-06-26 08:09:42
300
原创 剑指offer-二进制中1的个数
输入一个整数,输出该树而至今表示中1的个数,其中负数用补码表示。//二进制中1的个数class Solution {public: int NumberOf1(int n) { int count=0; while(n!=0) { count++; n=n&(n-1);//依次清空最右边1; } return count;
2017-06-21 11:20:52
176
原创 剑指offer-两个栈实现一个队列
两个栈实现一个队列,要保证整个组合的顺序不能改变。class Solution{public: void push(int node) { stack1.push(node); } int pop() { int a; if(stack2.empty()) { while(!stack1.empty())
2017-06-20 22:08:20
166
原创 C++知识点
关于strlenvoid test3(char* str1){ if(str1 == NULL){ return ; } char string[10]; if( strlen( str1 ) <= 10 ) { strcpy( string, str1 ); }}应将strcpy函数的实现//strcpy函数char *strcpy(char *s
2017-06-19 17:07:44
243
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人