自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 百度面试题-判断是否有环

不光要判断有环,还要计算长度,还要判断链接点.容我三思

2015-07-31 16:04:50 234

原创 减脂日记-02

今天小腿特别痛,可能是昨天运动量有点大,虽然拉伸了也于事无补之前几次下决心减脂都是因为这种酸痛放弃的,今天第一圈的时候差点倒下,每一步都一晃,像黑客帝国动画版本里那个短跑的跑到第三圈缓和了基本上到了正常的状态每天保持相同的运动量,肌肉充血的感觉非常好洗澡后特别想喝点汽水,顾虑到热量买了健怡可乐,前味还行,后味简直不能忍,简直是对可乐的侮辱明天试试屈臣氏的苏打水。

2015-07-25 21:32:22 531

原创 减脂日记-01

昨天看了一些文章,准备开始减脂。现在83kg不吃油炸,不吃鸡肉,不喝碳酸饮料吃主食,吃蔬菜,吃鸡蛋每天至少4KM,然后拉伸。每周测一次体重。觉得不会很快,希望能坚持三个月,如果下雨就在寝室做HIIT

2015-07-24 23:58:29 481

原创 字典排序

今天同学笔试遇到了字典排序然后搜索的问题,字典排序没用弄过,查了东西弥补一下。{“abc”,"bbd","adc"};这样三个字符串,分析:排序的思路与传统排序一致,区别在于比较大小以往是> 方法:先比较首位字符,小的排在前面,如果该为相同比较下一位bool CompareString(string FirstStr,string SecondStr)//true 1>2 fals

2015-07-24 10:44:12 439

原创 百度面试题-求1到n个数的排序

题目:有1,2,3,..n 的无序整数数组,求排序算法。要求尽量快分析:正常的无序数组用快排是最快的,但是题目中1到n ,肯定有文章可做,先观察一下。arr   [9,8,3,2,5,1,6,7,10,4]arrcp[1,2,3,4,5,6,7,8,9,10]规律arrcp[arr[i]-1]=arr[i];但是这个空间复杂度还是有的

2015-07-24 08:15:39 394

原创 剑指off-输入s打印所有和为s的连续正数序列

题目:输入s打印所有和为s的连续正数序列分析:方法是弄个像滑动窗口一样的东西,用两个指针维护,指针之间的和大于s,small++  小于s,big--,当small>big的时候结束,代码不写了,很easy

2015-07-21 17:32:29 256

原创 剑指off-求两个数和为s在排序序列中

题目:在一个排序序列中,输入和s,求序列中的两个数,满足两个数的和为s分析:这是一个排序序列,这一点要利用起来。设置两个指针head ,area如果head+area=s break如果head+area>s area--; head+area

2015-07-21 17:18:04 290

原创 剑指off-判断一棵树是否是平衡二叉树

题目:判断二叉树是不是平衡二叉树分析:平衡二叉树的特点是,左右子树的深度不超过1,那么根据之前求树的深度进行扩展int finddeepth(BinaryTreeNode* root){ if (root==NULL) { return 0; } int deepleft =finddeepth(root->left); int deepr

2015-07-21 16:49:31 312

原创 剑指off-求二叉树高

题目:求二叉树高分析:得到左子树高,得到右子树高,比较一下谁大,+1 返回int finddeepth(BinaryTreeNode* root){ if (root==NULL) { return 0; } int deepleft =finddeepth(root->left); int deepright=finddeepth(roo

2015-07-21 16:15:43 290

原创 剑指off-求两个链表的第一个公共节点

题目:求两个链表的第一个公共节点分析:如果两个链表一样长,怎么解决,一人走一步,判断一下,但是现在每个链表的长度位置,就不能这么做,那么我们先每个链表遍历一次,知道了大家的长度,完后一个快走两步,让他俩长度一致,就可以按照两个链表一样长解决,代码就不写了

2015-07-21 15:31:32 292

原创 剑指off-第一个字符串删除第二个字符串中的所有元素

分析:还是上一篇 hash_map应用void delchar(char str[],char del[]){ int hashmap[256]={0}; char *pDel=del; //hash统计 while (*pDel!='\0') { hashmap[*pDel]=1; pDel++; } char

2015-07-21 15:03:46 322

原创 剑指off-第一个只出现一次的字符

题目:在字符串中找到第一个只出现一次的字符,  abaccdeff 输出b分析:可以用哈希表,统计技术,然后顺序遍历哈希表,输出第一个值为1的字符。访问的值是字符,一共只有256个字符,用一个数组来实现哈希表int findonce(char str[]){ int result=0; int* hashmap=new int[256]; for (

2015-07-21 14:40:30 323

原创 剑指off-求第n个丑数

题目:只包含2,3,5的数字是丑数,1是第一个丑数,求第n个丑数分析:虽然有高端算法,但是估计再出一个这样的题我一下也做不出来,还是用最简单的方法,挨个判断把int ugly(int number){ int uglynumber=1; int count=0; while (1) { int uglycoy=uglynumber;

2015-07-21 14:13:04 301

原创 剑指off-求最小数字组合

题目:给定几个数字,求最小数字组合分析;可以将数字都转成字符串,然后用qsort进行排序,这个结果就是最小的数字组合值,还解决了组合数字溢出的问题。qsort(待排序数组首地址,  数组中待排序元素数量 , 各元素的占用空间大小 ,指向);//qsort是用快速排序实现的例子qsort(number,length,sizeof(int),cmp);int cmp(int a,in

2015-07-21 13:42:16 416

原创 剑指off-求数组最大连续和

题目:求数组最大连续和,比如1,-2,3,10,-4,7,2,-5结果应该为183,10,-4,7,2分析:这和之前的数组某个值个数大于一半的处理办法是一样的,如果加上当前的值小于0了,这个是稳亏的,那么重新开始,now置0,most是用来记录曾经出现过的最大值,如果now大于most,那么most=nowint Most(int arr[],int length){

2015-07-20 21:25:43 232

原创 剑指off-找到最小k个数字

题目:n个数的数组,找到最小的k个数字分析:可以使用排序然后取前K个数字,也可以维护一个k大小的set,set的存储是有序的,当set不满k个时候就入set,如果set达到k就与set中最大值比较,如果比最大值还大,那么继续,如果比最大值小那么替换最大值。set是用红黑树实现的。void FindMinK(int arr[],int length,int k){ set mink

2015-07-20 20:27:45 368

原创 剑指off-找到数组中个数大于总数一半的数字

题目:找到数组中个数大于总数一半的数字,比如 1,7,4,2,4,2,6,2,2,2,2,2,2,2分析:大于一半就是比其他的个数总和还多,设置一个变量now保存当前值,一个变量保存now的次数count,遍历数组,如何和当前值一样,count+1,如果不一样-1,如果count=0了,改变now值为arr[i]count 置1int MoreThanHalf(int arr[],int

2015-07-20 20:15:20 400

原创 剑指off-打印字符串全排列

题目:打印字符串全排列分析:递归实现,两步,第一步首位pbegin与数组中的其他值交换,第二步,在交换的基础上,也就是固定了首位,将余下的部分重复第一步,其实有第三步就是换回来void Permutation(char* pStr, char* pBegin){ if (*pBegin=='\0') { printf("%s \n",pStr);

2015-07-20 19:54:15 251

原创 剑指off-复制复杂链表

题目:链表的结构中多了一个spring指针,这个指针可能指向链表中的任何一个节点,复制这个复杂链表。分析:首先想到的是第一种方法,复制next串联起来的链表,然后复制spring 指针,但是每次都要从头顺序查找spring指针在副本中的值,那么这个效率应该是O(n^2)第二种方法是将副本建立在原来的链表中,在每一个原node后面新建我们的node,因为这还算一个链表,那么在复制spring

2015-07-20 17:01:37 339

原创 剑指off-判断一个数组是不是搜索二叉树的后序遍历的序列

题目:判断一个数组是不是搜索二叉树的后序遍历的序列,假设每个值都不一样分析:搜索二叉树有一个特性,左都比根小,右都比根大,那么后序遍历的最后一个数字式根节点,其余部分为两方面,一部分比它小,一部分比它大,其中最重要的每部分最后一个都是根节点,所以采用递归的方式。bool HR(int seque[],int length)//HR 后入 噗{ if (seque==NULL ||

2015-07-19 19:17:15 333

原创 剑指off-O(1)得到栈的最小元素

题目:实现一个栈,要求可以得到min,pop push min 复杂度O(1) min是得到最小元素,不是得到最小并弹出来分析:用一个辅助栈,每次push的时候都是压入最小的元素,同时弹出偷懒了,用STL的栈简单写一下void push(stack &stack1,stack &stack2,int n){ if (stack1.empty()) { st

2015-07-19 15:50:41 263

原创 剑指off-求一棵二叉树的镜像

题目:求一棵二叉树的镜像分析:后序遍历为基础,从最下面交换左右孩子//输入一个二叉树,输出它的镜像//通过后序遍历 交换left 和 right的指针void Mirror(BinaryTreeNode *pRoot){ if (pRoot==NULL) { return ; } Mirror(pRoot->left); Mirror(

2015-07-19 09:35:15 283

原创 剑指off-判断一棵二叉树是否包含另一棵

题目:输入二叉树A和B,判断B是不是A的子结构struct BinaryTreeNode//二叉树{ int key; BinaryTreeNode* left; BinaryTreeNode* right;};分析:应该分为两步,第一步找到相同的根节点,第二步判断是否相同,用递归的方法先写第二步二叉树和链表的递归终止条件先考虑出口NULL,还有一般性的

2015-07-19 09:04:35 294

原创 剑指off-归并两个有序链表

题目:归并两个有序链表分析:之前的归并排序使用的是额外的存储和哨兵,数据结构是数组,要达到归并效果,现在这种方法是不使用额外的存储,数据结构是链表。一个简单的流程是如下图,可以看成递归形式,终点是指针为NULLListNode* MergeList(ListNode* pHead1,ListNode* pHead2){ ListNode* merge=NULL;

2015-07-18 22:14:43 413 1

原创 剑指off-反转链表

题目:反转链表,返回反转后链表的指针防止在反转时候链表断裂,要有三个指针,当前,next,preListNode* reverseList(ListNode* pHead){ ListNode* head=pHead; ListNode* next=NULL; ListNode* pre=NULL; while (head!= NULL) {

2015-07-18 21:39:17 297

原创 剑指off-求链表终点节点

题目:如果链表个数为奇数,返回中间节点,如果为偶数,然后两个中的任意一个。思路:维护两个指针,一个指针的速度是另一个的两倍。相关题目:判断链表是否有环思路:维护两个指针,一个指针的速度是另一个的两倍。如果前一个快速指针追上了后一个慢速指针,证明有环。

2015-07-15 20:40:09 284

原创 TIPs

1.写逻辑简单的代码时候要注意鲁棒性,输入的指针是否为NULL,一直参数在不满足条件的时候是否给出正确的反应

2015-07-15 20:35:28 248

原创 sizeof 使用

int count = sizeof(chs)/sizeof(char);

2015-07-15 19:53:43 244

原创 剑指off-打印1到n

//题目:输出 1到n。焦点在于如果n很大,超过32位或者64位,这基本上无法表示//解决的办法是用字符串模拟加法,但是如何模拟,如何控制循环呢?//memset(char* number,int ch,int n);作用将number前n个位置用ascII码代替memset(a,0,sizeof(a))//用memset给每一个位赋值为ASCII'0'//strlen(s)不包括'\0'

2015-07-15 19:21:26 229

原创 xcode调试

control+command+Ycontinuefn+F7next stepcommand+R complie run

2015-07-15 19:16:17 213

原创 剑指off-统计数字二进制位有多少个1

//判断一个数字有多少位1//运用位运算,用n与1进行与运算,然后向左移动1,为什么不向右移动n,因为如果n是负数的话首位会不停补充1,造成死循环。int NumberOfOne(int n){ int count=0; int one=1; while (one!=0) { if (n & one) { count++;

2015-07-14 11:06:21 280

原创 位运算

位运算一共只有五种, 与     或    异或   左移右移  &    |    ^      >>

2015-07-13 17:56:57 243

原创 剑指off-fabonacci

//斐波那契数列//n=0 f=0 n=1 f=1 n>1 f(n-1)+f(n-2)//下面是递归实现,但递归实现是从上到底的,这个效率非常低,因为有好些数字被重复计算了,效率高的方法是用循环int Fibonacci(int n){ if (n<0) { return -1; } if (n==1) { return 1;

2015-07-13 17:37:52 347

原创 剑指off-递归求1到n的和

//递归求1到n的和int total(int n){ if (n==1) { return 1; } return n+total(n-1);}

2015-07-13 16:28:31 506

原创 剑指off-求旋转数组最小值

//求旋转数组的最小值//固定最后一个为基准,从头开始,找到第一个比最后一个小的,返回其值int min(int arr[],int length){ int result=-1; int area=length-1; if (length<1) { return result; } for (int i=0; i<lengt

2015-07-13 15:41:44 268

原创 剑指off-给员工年龄排序

//题目给几万个员工的年龄排序,要求时间复杂度是O(n);//第一步先统计1-99,然后给arr重新赋值//这是计数排序?void AgesSort(int arr[],int length){   int oldest=99;   int rangeold[100]={0};   for (int i=0; i        rangeold[

2015-07-13 11:57:54 330

原创 二分查找

//二分查找 前提是数组是有序的,先排序再查找。int BinSearch(int arr[],int length,int num){ int left=0; int right=length-1; int mid=(left+right)/2; while (left<=right) { if(arr[mid]==num) {

2015-07-13 11:17:18 228

原创 剑指off-从尾到头打印

//从尾到头打印链表struct ListNode{ string key; ListNode* next;};bool printlistreversingly(ListNode* pHead){ if (pHead==NULL) { return false; } stack sk; while (pHead!=NULL

2015-07-13 10:43:59 268

原创 剑指off-用两个栈试下你队列

//两个栈实现一个队列void cqueue::appendTail(int num){ stack1.push(num);}void cqueue::deleteHead(){ if (stack2.empty()) { while (!stack1.empty()) { int temp=stack1.top();

2015-07-13 10:43:12 366

原创 剑指off-用两个队列模拟栈

//用两个队列模拟栈//总维持一个栈有数据,另一个为空void cstack::push(int num){ if (queue2.size()!=0) { queue2.push(num); } else { queue1.push(num); } }void cstack::pop(){ if

2015-07-13 10:42:02 288

空空如也

空空如也

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

TA关注的人

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