读书笔记
文章平均质量分 67
kay_zhyu
这个作者很懒,什么都没留下…
展开
-
Effective C++学习笔记之第四章(1)
chapter 4:设计与声明item18:让接口容易被正确使用,不易被误用理想情况下应该是如果能编译通过,那么接口一定能实现你想要的,否则就不能编译假设正在设计一个表示时间数据的类的构造函数:Date(int month, int day, int year);这样会出现两个问题,一是传参的顺序不对,而是所传参数的取值范围不对。1)用户在传参的时候顺序不对。OK,也许你想到了用结原创 2013-04-14 10:52:37 · 1172 阅读 · 2 评论 -
编程之美系列之求子数组的连续最大和
一个有n个整数元素(可以是负数)的一维数组,连续的子数组有很多,那连续的子数组之和的最大值是什么呢?而这个和最大的子数组是哪一段数据呢?下面就让我们来一一的剖析这个问题。首先撇开后面一个问题,不考虑究竟是哪一段数据,只需要求出最大的和就可以了。1、在说思路之前,先看看网上比较流行的解法,到底这里面有什么问题呢?如果数组里面有正数,OK,那一点问题都没有,比如说{-2,5,3,-6,4,-8,6原创 2013-04-30 20:09:41 · 1078 阅读 · 0 评论 -
编程之美系列之栈和队列2—在O(1)的时间内得到队列的最大或者最小值
上一篇博客http://blog.csdn.net/kay_zhyu/article/details/8869542中提到,在O(1)的时间内取得栈的最大或者最小值,作法是利用一个辅助栈去动态的维护这个最小值。但是如果要在O(1)的时间内取得队列的最小值,那这就有点难办的吧。毕竟队列的操作特点是先进先出,跟栈的完全相反的,我们没办法像栈那要用一个动态的数组去维护这个最小值。怎么办呢?既然栈的最小值原创 2013-04-30 15:00:46 · 3843 阅读 · 3 评论 -
编程之美系列之求子数组的最大和(续)
在上一篇博客编程之美系列之求子数组的最大和中给出了连续子数组最大和的求法。现在把题目扩展一下,有以下两种情况。PS:转载请注明出处:http://blog.csdn.net/kay_zhyu/article/details/88778261、这个数组是循环的,也就是说数组首尾相连,找出连续子数组的最大和,那这个最大和可能就有一部分在最左边,有一部分在最右边。有两种处理方法:*在数组的后原创 2013-05-02 21:47:01 · 1079 阅读 · 0 评论 -
编程之美系列之求子数组的连续最大积
上一篇博客编程之美系列之求子数组的最大乘积讲述了一种求最大乘积的情况,不过那个题相对来说是比较简单的,因为抽象出来之后其实也就是找出需要排除的一个数而已。OK,下面来一个题目的变形,当然这个题目也可以作为编程之美系列之求子数组的连续最大和的扩展。既然需要的子数组是连续的,也就是说是取某一段数据。怎么去决定取哪一段呢?OK,在说思路之前,先说点实际的例子来分析一下。比如说数组{-2,3,4,-3,-原创 2013-05-02 11:29:19 · 1674 阅读 · 6 评论 -
Effective C++学习笔记之第三章
Chapter 3 资源管理item13:以对象管理资源以对象管理资源有两个关键的想法:1)获得资源后立刻放进管理对象(managing object)内。实际上这个以"以对象管理资源"的观念常被称为"资源取得时机便是初始化时机"(Resource Acquisition Is Initialization;RAII)。因为我们几乎总是在获得一笔资源后于同一语句内以它来初始化某个管理对原创 2013-04-12 09:13:52 · 722 阅读 · 0 评论 -
剑指Offer读书笔记之第二章3从后往前打印链表
如果给定一个链表,不能改变数据,也就是不能通过反转链表来实现,将链表从后往前打印出来。怎么实现呢?用一个辅助栈,每访问到一个节点的时候,将节点的数据存到栈中,访问完所有的节点之后,将栈中的元素从栈顶打印到栈底。核心代码如下://把节点加到链表中,每次在pHead后面加节点void Add(NODE *pHead, int v){ node[++top].data = v; no原创 2013-05-01 14:50:43 · 1012 阅读 · 1 评论 -
Effective C++学习笔记之第四章(5)
chapter 4 设计与声明item24:当所有参数都需要隐式类型转换的时候,使用non-member函数1)如果一个函数的每一个参数都需要一个类型转换(包括可能的this指针),那么这个函数一定是一个non-member函数。下面一步步来分析,假设有一个实数类,需要进行乘法运算://实数类的声明class Rational {public: // ctor is de原创 2013-04-19 11:41:23 · 5632 阅读 · 0 评论 -
C#学习笔记之垃圾回收机制
垃圾回收器的基本假定:1:一个对象越新,那么这个对象的生命周期就越短。也就是说最近分配内存空间的对象最有可能被释放。2:一个对象越老,那么这个对象的生命周期就越长。也就是说经过几轮垃圾回收后,对象仍然存在,搜索它时就需要进行大量的工作,却只能释放很小的一部分空间。所以有可能还没有搜索到这个对象的时候,我们已经获得了需要的内存了。3:新对象之间通常更可能和新对象之间存在引用关系,也就是说原创 2013-06-05 11:13:15 · 786 阅读 · 0 评论 -
编程之美系列之寻找最大的K个数
题目描述:有很多无序的数,姑且家丁它们各不相等,怎么选出其中最大的若干个数呢?这里我不想去写一些很没有意义的思路。神马先排序取前k个这种弱爆了并且一点也不适用的思想我就不想废话了,因为如果数据量很大的时候,对所有数据排序肯定是费力不讨好的事情,换换思路,不能全部排序,那就部分排序吧!这里介绍两个比较实用的。当然为了有点递进关系,先来一个比较差一点的方法。如果对排序算法还不是很熟悉的,可以参考博客:原创 2013-05-01 09:39:58 · 966 阅读 · 0 评论 -
编程之美系列之计算字符串的相似度
题目描述:也就是给一个源串和目标串,计算最少的操作数,使得源串进行下列操作之后等于目标串。1、在给定的位置插入字符2、将当前字符替换成任意字符3、删除任意字符题目分析:如果当前两个字符相等,则结果就是Src+1和Pattern+1两个字符串的最小操作数。如果不等,就分三种情况:1、如果是在给定的位置插入字符,那要求的操作数就是Src和Pattern+1两个字符串的最小操原创 2013-09-13 11:32:58 · 1126 阅读 · 0 评论 -
编程之美系列之关于数组的二分查找
有序的数组,其中的元素可以通过二分查找得到,可以如果一个数组是由有序数组左旋得到的,能不能还是用二分查找得到呢?答案是肯定的。为了简化问题,我先假设数组是由升序的数组通过左旋得到了,比如说{1,2,3,4,5,6}=>{4,5,6,1,2,3}。只要我们找到这个最大值的下标,那么就可以把数组分成两个升序的有序数组了。找这个最大值很简单,但是我想你应该不会说全部遍历一遍数组吧!这里讲的重点是二分原创 2013-05-01 15:19:05 · 1757 阅读 · 0 评论 -
剑指Offer读书笔记之第二章1二维有序数组中的查找
3、二维数组中的查找,给定一个数组二维数组arr[4][4]={1,2,8,9;2,4,9,12;4,7,10,13;6,8,11,15}.在其中找一个key=7.数组每行从左到右递增,每列从上到下递增。查找起点为右上角。题目扩展:如果数组中每行和每列有序,可能递增可能递减,怎么确定查找起点?按照相同的有序分别在行和列画一个箭头表示这个有序的方向,两个向量的衔接处就是查找的起点。#incl原创 2013-04-29 10:52:05 · 701 阅读 · 0 评论 -
编程之美系列之二叉树1—二叉树中的距离问题
先来点基础的,更多扩展,请猛击:http://blog.csdn.net/kay_zhyu/article/details/88689951、首先来个入门级的,求二叉树的深度#include#includestruct NODE{ NODE *Left; NODE *Right;};const int N = 20;NODE node[N];void A原创 2013-04-29 20:45:56 · 992 阅读 · 0 评论 -
编程之美系列之栈和队列1—在O(1)的时间内得到栈的最大或者最小值
1、定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。对于找最大值其实是一个道理,这里就不废话了。要求:函数min、push、pop的时间复杂度都是o(1)这里用一个辅助栈去动态的维护栈的最小值,每次如果有新元素加进来,就和辅助栈的栈顶元素比较,如果新元素较小,把新元素push到辅助栈里面,如果新元素较大,将栈顶的元素拷贝到top+1里面。所以pop的时候直接--top就可以原创 2013-04-30 14:14:30 · 2672 阅读 · 1 评论 -
Effective C++学习笔记之第五章(3)
chapter 5 实现item30 透彻了解inline的里里外外1)当需要定义一个小型的的函数时,inline比宏要好,不容易出错,也不会有函数调用所需要的开销。编译器会直接将inline函数出现的地方直接用函数体替换,明显这样会引起代码膨胀、指令击中率低以及由此引发的一些效率问题。所有这个函数最好是被频繁调用,这样才会有我们预期的最小化代码膨胀问题和最大化程序的速度。2)一般来说原创 2013-04-24 10:19:40 · 934 阅读 · 0 评论 -
Effective C++学习笔记之第五章(4)
chapter 5 实现item31:将文件的编译依存关系降至最低1)首先考虑一个关于person的类,一般的定义如下:#include #include "date.h"#include "address.h"class Person {public: Person(const std::string& name, const Date& birthday,co原创 2013-04-24 14:25:57 · 803 阅读 · 0 评论 -
Effective C++学习笔记之第四章(3)
chapter 4:设计与声明item21:必须返回对象时,别妄想返回其reference1)当程序员了解了pass-by-value的实现效率之后,就会根除其带来的种种邪恶。这样会不可避免的犯下一个致命的错误,那就是传递一个根本不存在的对象的引用。考虑下面一个例子,假设有一个代表实数的类,里面包含了一个计算两个实数乘积的函数。如下:class Rational {public原创 2013-04-16 10:09:42 · 908 阅读 · 0 评论 -
Effective C++学习笔记之第四章(4)
chapter 4 设计与声明item23 :宁以non-member、non-friend函数替换member函数1)假设这里有一个关于web浏览器的一个类,它有一系列的清楚操作,最后需要写一个函数来清除所有的东西,也就是说调用它所有的清楚操作。代码如下:class WebBrowser {public: ... void clearCache(); void原创 2013-04-18 10:35:44 · 5448 阅读 · 3 评论 -
Effective C++学习笔记之第五章(1)
chapter 5:实现item26:尽可能延后变量的定义1)如果一个函数中可能抛出异常,那么在确定你必须用这个变量的时候定义这个变量,比如://变量放在异常捕捉之前,如果有异常抛出,那定义的这个变量就没有被使用过。std::string encryptPassword(const std::string& password){ using namespace std;原创 2013-04-20 15:09:43 · 1402 阅读 · 2 评论 -
Effective C++学习笔记之第四章(2)
chapter 4 设计与声明item19:设计class犹如设计type事实上,设计每个类都需要面临以下几个问题,so,在定义一个新类型之前,最好把这些问题想清楚。1)新的类如何被创建和销毁。这就涉及到类的构造函数和析构函数,以及它申请内存和释放内存的函数。比如说new和delete operator2)对象的初始化Initialization和对象的赋值assignment有什原创 2013-04-15 14:17:30 · 879 阅读 · 0 评论 -
Effective C++学习笔记之第五章(2)
chapter 5 实现item28:避免返回handles指向对象的内部成分1)避免返回handles(指针、引用和迭代器)指向对象的内部成分,有利于加强封装性,保证const成员函数表现得像个const,减低创建一个悬吊指针的可能。下面从三个方面来说。2)如果class的成员变量本来应该是private,其它人没有访问权,但是如果这里有一个public的函数来返回它的指针,那么这个原创 2013-04-21 11:32:43 · 837 阅读 · 0 评论 -
编程之美系列之二叉树2—二叉树的距离问题(续)
前面一篇博客:http://blog.csdn.net/kay_zhyu/article/details/8867839讲了二叉树的一些基本的操作,鉴于内容有点多,所以分成两个,这一部分主要是将怎么求给定的两个节点之间的距离。有两种情况:3、如果很频繁的询问两个节点的距离,那么就用一个二维数组来维护这个距离,询问的时间就是O(1).当然,如果只是一次询问,那这样做就很费时。OK,先不管那么原创 2013-04-30 10:31:20 · 1049 阅读 · 0 评论 -
剑指Offer读书笔记之第五章1把数组排成最小的数
33、把数组排成最小的数。假设给定数组{3,32,321},则其排成的最小的数就是321323.分析:由于这里给的数组可能很长,如果用一个特定的类型来存放可能会导致溢出,所以采用字符串来处理。定义一种新的比较方式,对数组中的数进行排序,然后从小到大输出即可。#include#include#includeconst int N = 15;char GlobalStr1[原创 2013-04-29 09:58:59 · 686 阅读 · 0 评论 -
编程之美系列之二叉树的分层遍历
关于二叉树的遍历,大家肯定都不会陌生。当然,这种题目很多人都会做,但是你们心中的解题办法是不是够漂亮呢?首先,这里需要用到的数据结构的队列,这应该没有什么疑问,先进先出嘛。子节点在父节点之后,而用队列,子节点是通过父节点入队列,所以在父节点之后,OK~符合标准!先来说说大致的一些解题思路。1、在NODE的定义中定义一个flag标记,用来记录该节点属于哪一层,然后如果当前节点的层数大于上一个原创 2013-05-01 16:42:39 · 993 阅读 · 0 评论 -
编程之美系列之求子数组的最大乘积
题目描述:给定一个长度为N的整数数组,只允许用乘法,计算任意(N-1)个数的组合中乘积最大的一组,并写出算法的时间复杂度。算法分析:1、二逼青年的做法,把所有可能的(N-1)个数的组合照出来,分别计算它们的乘积,并比较大小。好吧~时间复杂度是O(N^2),这种效率,我连代码都懒得写。2、来点文艺一点的,其实也就是上个月去参加腾讯笔试的一道附加题,我当时就做出来了。具体的看另外一篇博客:原创 2013-05-02 11:04:30 · 1559 阅读 · 0 评论 -
深入JAVA虚拟机之java体系结构
为什么使用java因为java的体系结构决定了它适合网络环境。它可以保证安全的、健壮的且和平台无关的程序通过网络传播,在很多不同的计算机和设备上运行。网络带来的挑战和机遇挑战: 1. 以网络为核心的硬件环境所包含的设备越来越广泛。不同的设备,不同的硬件体系,不同的操作系统 2. 安全性。包括网络安全和运行时安全(健壮性)。对于网络安全,java解决这个挑战的方法是:提供一个受保护的环境,从网络上原创 2016-01-04 11:37:53 · 398 阅读 · 0 评论