剑指offer-学习笔记

liudw-0215 2018-06-06 原文

前言:18/06/06开始学习,每个程序都会用C写一遍,因书中用C++举例,也会换种思路写,供学习和参考!!!很推荐这本书很不错,准备入手,一般不买实体书,都用电子书,因一般都看一遍,但这本会看很多遍!无论刚毕业,还是跳槽都可以看一下…

面试题3:二维数组中的查找

题目如图,所有题目截图均引自《剑指offer》,接下来不再说明!

书中从右上角开始查找,我的程序从左下角查找:

  1. #include<stdio.h>
  2. #include<stdbool.h>
  3.  
  4. bool Find(int (*num)[4],int rows,int column,int number)
  5. {
  6. bool found = false;
  7. if(num!=NULL && rows>0 && column>0)
  8. {
  9. int col = 0;
  10. int row = rows-1;
  11. while(col<column && row>=0)
  12. {
  13. if((*num)[row*column+col] == number)
  14. {
  15. found = true;
  16. break;
  17. }
  18. if((*num)[row*column+col] < number)
  19. ++col;
  20. else
  21. --row;
  22. }
  23. }
  24. return found;
  25. }
  26. int main()
  27. {
  28. int number;
  29. int num[4][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
  30. puts("please input your number:");
  31. scanf("%d",&number);
  32. bool res = false;
  33. res = Find(num,4,4,number);
  34. printf("res:%d\n",res);
  35. return 0;
  36. }

对逻辑不理解的,可以随时留言,随时解答!!!

面试题4:

代码如下:

  1. #include<stdio.h>
  2.  
  3. void ReplaceBlank(char string[],int length)
  4. {
  5. if(string==NULL && length<=0)
  6. return;
  7. int originalLen = 0;//字符串实际长度
  8. int numBlank=0,i=0;
  9. while(string[i] != '\0')
  10. {
  11. ++originalLen;
  12. if(string[i] == ' ')
  13. ++numBlank;
  14. ++i;
  15. }
  16. //替换后的长度
  17. int newLen = originalLen + numBlank*2;
  18. if(newLen > length)
  19. return;
  20. int indexLen = originalLen;
  21. int indexOfNew = newLen;
  22. while(indexLen>=0 && indexOfNew>indexLen)
  23. {
  24. if(string[indexLen] == ' ')
  25. {
  26. string[indexOfNew--]='0';
  27. string[indexOfNew--]='2';
  28. string[indexOfNew--]='%';
  29. }
  30. else
  31. {
  32. string[indexOfNew--] = string[indexLen];
  33. }
  34. --indexLen;
  35. }
  36. }
  37. int main()
  38. {
  39. char buf[]={"hello world!"};
  40. ReplaceBlank(buf,20);
  41. printf("buf:%s\n",buf);
  42. return 0;
  43. }

注:重点理解从尾到头遍历的时间复杂度为O(n)!!!

面试题5:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef int data_t;
  4. //栈结构
  5. typedef struct LIFO
  6. {
  7. int *data; // 4字节的指针 指向数组(后分配的数组)
  8. int maxlen; // 存储数据的个数最大值
  9. int top;
  10. }seqstack_t;
  11. //链表结构
  12. typedef struct node{
  13. int data;
  14. struct node *next;
  15. }linknode_t,* linklist_t;
  16. //创建空的链表
  17. linknode_t *CreateLink()
  18. {
  19. linknode_t *H;
  20. H = (linklist_t)malloc(sizeof(linknode_t));
  21. H->next = NULL;
  22. return H;
  23. }
  24. //初始化一个空链表
  25. void InitLink(linknode_t *H)
  26. {
  27. linknode_t *r,*p;//r指向队尾
  28. r = H;
  29. int i=0;
  30. for(;i<5;i++)
  31. {
  32. p = (linklist_t)malloc(sizeof(linknode_t));
  33. p->data = i+1;
  34. p->next = NULL;
  35. r->next = p;
  36. r = p;//再将r指向队尾
  37. }
  38. }
  39. //打印所有节点
  40. linknode_t * ShowLink(linknode_t *H,seqstack_t *T)
  41. {
  42. linknode_t *p,*r;
  43. int temp=0;
  44. p = H->next;
  45. while(p != NULL)
  46. {
  47. T->data[T->top]=p->data;
  48. p = p->next;
  49. T->top++;
  50. }
  51. --T->top;
  52. while(T->top>=0)
  53. {
  54. printf("data:%-5d",T->data[T->top]);
  55. T->top--;
  56. }
  57. }
  58. //清空链表
  59. void ClearLink(linknode_t *H)
  60. {
  61. linknode_t *p,*q;//p是删除的节点,q记录下一个要删除的节点
  62. q = H->next;
  63. while(q != NULL)
  64. {
  65. p = q;
  66. q = p->next;
  67. free(p);
  68. }
  69. printf("\n");
  70. H->next = NULL;
  71. }
  72. seqstack_t * CreateStack(int max)
  73. {
  74. seqstack_t *H; // 分配结构体空间 --> 一个栈
  75. H = (seqstack_t *)malloc(sizeof(seqstack_t));
  76. H->data = (data_t *)malloc(sizeof(data_t) * max);// 结构体成员赋值
  77. H->maxlen = max;
  78. H->top = 0;
  79. return H;
  80. }
  81. int main()
  82. {
  83. seqstack_t *T=CreateStack(10); // 获取一个空的栈
  84. linknode_t *H=CreateLink();
  85. InitLink(H);
  86. ShowLink(H,T);
  87. ClearLink(H);
  88. free(H);
  89. return 0;
  90. }

注:用栈的后进先出LIFO思想实现链表的从尾到头的输出!!!

未完待续……

 

发表于 2018-06-06 19:55 liudw 阅读() 评论() 编辑 收藏

 

版权声明:本文为liudw-0215原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liudw-0215/p/9147002.html

剑指offer-学习笔记的更多相关文章

  1. Spark 模型选择和调参

    Spark – ML Tuning 官方文档:https://spark.apache.org/d […]...

  2. 精读《原则》,教你如何通过原则过上想要的人生(上篇)

    我一生中学到的最重要的东西是一种以原则为基础的生活方式,是它帮助我发现真相是什么,并据此如何行动。-瑞·达利欧 […]...

  3. 陆犯焉识

            《陆犯焉识》读完了,其中让我印象最深的不是主角的陆焉识,也不是一生悲剧的冯婉喻,而是韩念痕。她 […]...

  4. 【读书笔记】赫胥黎-美丽新世界

    【读书笔记】赫胥黎-美丽新世界 赫胥黎-美丽新世界/Brave New World  原文载于本人个人网站:h […]...

  5. 第一章 数据结构和算法

    解压序列,并赋值给多个变量: 1.1 对任何可迭代对象(list, tuple, dict, str..)都能 […]...

  6. [读书笔记] 你早该这么玩Excel

    《你早该这么玩Excel》只教你做两件事:如何设计一张“天下第一表”,你会恍然大悟,以前遇到的种种麻烦是因为做 […]...

  7. 重新梳理调度器——GMP 调度模型

    重新梳理调度器——GMP 调度模型 2021-07-17 01:11  沉睡的木木夕  阅读(0)  评论(0 […]...

  8. 读薄《高性能MySql》(二)Schem与数据优化

    读薄《高性能MySql》(一)MySql基本知识 选择更优的数据类型 当我们设计数据类型的时候应该选择最优的数 […]...

随机推荐

  1. 深入Nodejs模块fs – 文件系统操作

    node 的fs文档密密麻麻的 api 非常多,毕竟全面支持对文件系统的操作。文档组织的很好,操作基本分为文件 […]...

  2. 文件和缓存项目依赖

    文件和缓存项目依赖        要创建缓存依赖,你需要创建一个 CacheDependency 对象并在添加 […]...

  3. 关于docker线上部署时间问题

    背景 公司线上部署采用docker swarm方式,这几天线上项目时间突然出了问题(ps:第一反应,我去,这也 […]...

  4. 我画着图,FluentAPI 她自己就生成了

    在 Newbe.ObjectVistor 0.3 版本中我们非常兴奋的引入了一个紧张刺激的新特性:使用状态图来 […]...

  5. JDK的sql设计不合理导致的驱动类初始化死锁问题

    问题描述 当我们一个系统既需要mysql驱动,也需要oracle驱动的时候,在并发加载初始化这些驱动类的过程中 […]...

  6. guava cache大量的WARN日志的问题分析

    一、问题显现 2019-04-21 11:16:32 [http-nio-4081-exec-2] WARN […]...

  7. 在Windows系统中配置Google AddressSanitizer

    Google AddressSanitizer简介 AddressSanitizer (ASan) 是 C 和 […]...

  8. ajax图片上传功能

      一、应用场景   当用户需要上传图片当做自己的头像时,预览的时候该图片需要在本地预览,不应该通过网络从服务 […]...