我阅读的课外书籍是《编程之美》,《编程之美》是一本很好的书,作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。在阅读过程中,加深了我对代码的认识,充分享受到了学习和编程的乐趣。以下是我在学习过程中遇到的问题与探索:

1、在买书问题中,采取什么样的贪心算法最优?

答:本次选择的书的数量不应该小于下一次可选择的书的最大数量;

每一次选择之前都应该查表,选择其中使得近两次折扣数最大的那个作为本次选择。

2、当数据量很大时,有很多无序的数,从中找出最大的K个数。

答:用容量为K的最小堆来存储最大的K个数。最小堆的堆顶元素就是最大K个数中的最小的一个。每次扫描一个数据X,如果X比堆顶元素Y小,则不需要改变原来的堆,因为这个元素比最大的K个数要小。如果X比堆顶元素大,那么用X替换堆顶元素Y,在替换之后,X可能破坏了最小堆的结构,需要调整堆来维持堆的性质。调整过程时间复杂度为O(logK)。

3、快速找出机器故障问题的优化解法

答:1、利用异或运算。事实上,将这个列表中的所有ID异或后的值即为所求ID。这种方法时间复杂度为O(N),空间复杂度为O(1)。在时间和空间上,基本已经达到最优。

2、利用“不变量”。所有ID的和为一个不变量,对剩下ID求和。所有ID的和与剩下ID的和之差即为所求ID。由于所有ID之和可以事先算好,所以,该方法也可以在O(N)时间, O(1)空间内解决。

4、队列中取最大值操作问题的其他解法

答:用最大堆来维护队列中的节点,队列用单链表表示,每个节点包含数据,而最大堆用数组表示,数组元素为节点的指针。入队的时间复杂度为O(logn),出队的时间复杂度为O(n),达不到书上的O(logn),取最大值的时间复杂度为O(1)。

5、如果需要找出N个数组中第二大数,需要比较多少次?

  1. int FindSecondMax(int A[],int size)
  2. {
  3. int i=0;
  4. int Max = A[0];
  5. int secondMax;
  6. for(i=1;i<size;i++)
  7. {
  8. if(Max <= A[i])
  9. {
  10. secondMax = Max;
  11. Max= A[i];
  12. }
  13. else
  14. {
  15. if(secondMax <=A[i])
  16. {
  17. secondMax = A[i];
  18. }
  19. }
  20. }
  21. return secondMax;
  22. }

该算法的时间复杂度为O(N)。

转载于:https://www.cnblogs.com/lwq12061168/p/4028450.html

《编程之美》阅读分享相关推荐

  1. 什么是好代码-代码整洁之道阅读笔记

    根据我所阅读的书<代码整洁之道>里的一句话: "衡量代码质量的唯一有效标准: WTF/min" 从哲学的角度讲,不得不说这真的很客观!!! 毕业不久的我也没有太多关于好 ...

  2. 代码整洁之道--阅读

    简单代码依其重要顺序 1.能通过所有测试 2.没有重复代码 3.体现系统中的全部设计理念 4.包括尽量少的实体,比如类.方法.函数等. 有意义的命名 1.名副其实 2.避免误导 避免留下掩藏代码被一的 ...

  3. 《代码整洁之道》—第1章1.1节要有代码

    本节书摘来自异步社区<代码整洁之道>一书中的第1章1.1节要有代码,作者[美]Robert C. Martin,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第 ...

  4. 《代码整洁之道》阅读笔记 4注释

    "Comments Do Not Make Up for Bad Code."(注释不是对劣质代码的补救).事实上好的代码即便没有注释也拥有良好的可读性,但恰当的注释会让代码变得更 ...

  5. 《代码整洁之道》阅读笔记 12迭进

    系统的迭代式演进 1.通过迭进设计达到整洁目的 运行所有测试 不可重复 表达程序员的意图 尽可能减少类和方法的数量 以上规则按其重要程序排列 2.简单设计原则1:运行所有测试 设计必须制造出如预期一般 ...

  6. 《代码整洁之道》(Clean Code)- 读书笔记

    一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...

  7. 代码整洁之道(Clean Code)- 读书笔记

    Sorry, 许久未更新文章了,主要因为刚刚换了一家新公司,忙于组建团队(建设.招聘.流程.框架等)与熟悉公司业务,还有领导给的其他工作等等,实在是没有时间更新了.最近在和团队分享Bob大叔的< ...

  8. Clean Code 代码整洁之道

    一直想深入看看<CleanCode 代码整洁之道>,增强代码整洁性.看到此文,略有启发,转载以敬之. 作者:JobsandCzj  来源:CSDN  原文:https://blog.csd ...

  9. 代码整洁之道(一)最佳实践小结

    摘要: Any fool can write code that a computer can understand. Good programmers write code that humans ...

  10. 2015年第11本:代码整洁之道Clean Code

    前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...

最新文章

  1. Python面向对象进阶及类成员
  2. 【引用】phpmyadmin提示Access denied for user 'root'@'localhost' (using password: NO)的解决办法...
  3. 只能选择分卷文件的第一部分_文件太大如何分块压缩?BetterZip简单搞定
  4. 在以下说法错误的是_外行人对翡翠有哪些错误认知?行家给你最精准的答案
  5. 感到压力时,你秃的是头,而TA秃的是屁股
  6. Linux: Shell编程基础
  7. paging modes-分页模式
  8. PaddlePaddle︱开发文档中学习情感分类(CNN、LSTM、双向LSTM)、语义角色标注
  9. 计算机考研网络复试总结
  10. JAVA毕业设计大数据在线考试系统在线阅卷系统及大数据统计分析计算机源码+lw文档+系统+调试部署+数据库
  11. EXCEL 根据超链接直接显示图片
  12. Linux下进行微信小程序开发
  13. 泡泡龙游戏开发系列教程(四)
  14. ansys2020视频教程
  15. python开源怎么盈利_弄清楚Python最火的开源项目,你就掌握了商机
  16. 【HR必看】Excel中对身份证号码的处理技巧
  17. 2023 DiscuzX 酷二次元博客主题模板
  18. 安卓蓝牙打印机无法打印问题
  19. 橘子学java之java中的协程
  20. 蒲公英内测托管平台:免费WiFi应用暗藏陷阱

热门文章

  1. python投注_python练习 | 下注猜大小 | 入门级
  2. c语言知识竞赛题库答案及,《C语言程序设计》复习题库.docx
  3. linux添加ctrl c,Linux ctrl-c explained(ctrl-c 详解)
  4. nginx 超时设置_Nginx最详细的反向代理配置步骤,拿去不谢
  5. 2019测试指南-web应用程序安全测试(二)识别应用程序入口点
  6. [转] Scala Try 与错误处理
  7. java编程思想(注释文档)
  8. 泛型的继承和通配符,同时归纳集合部分的面试点
  9. k3cloud新建简单帐表教程
  10. 【 马哥教育内部文档】-RPM制作指南