2012年7月25日

摘要: 6–3. 排序(a) 输入一串数字,从大到小排列之.(b) 跟a 一样,不过要用字典序从大到小排列之.解答:# -*- coding:utf-8 -*- '''Created on 2012-7-24@author: wanglei'''#/usr/bin/python#Filename:6-3.pyastr=raw_input("请输入一行数字,以空格分隔: ")astr=astr.split(" ")intlist=[]alist=list(astr)for i in alist: intlist.ap 阅读全文
posted @ 2012-07-25 11:17 温柔的暴力 阅读(692) 评论(0) 推荐(0) 编辑

2012年7月20日

摘要: 类被加载到虚拟机内存开始,到卸载出内存为止,经历了:加载->验证->准备->解析->初始化->使用->卸载 这七个过程加载在加载阶段,虚拟机要完成三件事:(1) 通过一个类的全限定名来获取定义此类的二进制字节流;(2) 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;(3) 在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。2.验证验证是链接阶段的第一步,目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全。验证阶段大致要经历四个过程:文件格式验证, 阅读全文
posted @ 2012-07-20 16:30 温柔的暴力 阅读(362) 评论(0) 推荐(0) 编辑

2012年7月19日

摘要: 尾递归(Tail Recursion) 在传统的递归中,典型的模式是,你执行第一个递归调用,然后接着调用下一个递归来计算结果。这种方式中途你是得不到计算结果,知道所有的递归调用都返回。 这样虽然很大程度上简洁了代码编写,但是让人很难它跟高效联系起来。因为随着递归的深入,之前的一些变量需要分配堆栈来保存。 尾递归相对传统递归,其是一种特例。在尾递归中,先执行某部分的计算,然后开始调用递归,所以你可以得到当前的计算结果,而这个结果也将作为参数传入下一次递归。这也就是说函数调用出现在调用者函数的尾部,因为是尾部,所以其有一个优越于传统递归之处在于无需去保存任何局部变量,从内存消耗上,实现节约特性。. 阅读全文
posted @ 2012-07-19 11:47 温柔的暴力 阅读(5515) 评论(0) 推荐(0) 编辑

2012年7月18日

摘要: 首先查看官方API那个的解释:———————————————————————————————————————internpublic Stringintern()返回字符串对象的规范化表示形式。一个初始时为空的字符串池,它由类 String 私有地维护。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由equals(Object)方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern()== 阅读全文
posted @ 2012-07-18 09:23 温柔的暴力 阅读(475) 评论(0) 推荐(0) 编辑

2012年5月31日

摘要: 先看一个例子:#include<iostream>usingnamespace std;char *fun(void){ char *p="hello the world"; char buffer[] = "hello the world"; return p; //这里为什么可以返回局部定义的指针?// return buffer; //这里为什么不可以返回局部定义的数组名?}int main(void){ char *s; s=fun(); printf("%s\n",s); return 0;}这里返回的是... 阅读全文
posted @ 2012-05-31 14:45 温柔的暴力 阅读(2060) 评论(0) 推荐(0) 编辑
摘要: Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。来自:http://oss.lzu.edu.cn/blog/article.php?uid_7/tid_700.html#comment背景最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。不过,目前写一个一千行左右的代码,也很少出现段错误,或者是即使出现了,也很容易找出来,并且处理掉。那什么是段错误?段错误为什么是个麻烦事?以及怎么发现程序中的段错误以及如何避免发生段错误呢?一方面为了给自己的学习做个总结,另一方面由 阅读全文
posted @ 2012-05-31 13:57 温柔的暴力 阅读(101340) 评论(3) 推荐(9) 编辑
摘要: 有这样一个函数f(n),对于任意正整数n,它表示从 0 到 n 之间出现“1”的个数,比如 f(1) = 1, f(13) = 6,请列出从 1 到 1234567890 中所有的 f(n) = n 的n, 要求准确快速.相信很多人都能立刻得出以下的解法:for(n:N){判断n包含1的个数;累加计数器;}这是最直接的解法,但遗憾的是,时间复杂程度为O(N*logN)。因为还需要循环判断当前的n的各位数,该判断的时间复杂程度为O(logN)。接下来就应该思考效率更高的解法了。说实话,这道题让我想起另外一道简单的算法题:N为正整数,计算从1到N的整数和。很多人都采用了循环求解。然后利用初等数学知 阅读全文
posted @ 2012-05-31 11:00 温柔的暴力 阅读(3224) 评论(0) 推荐(0) 编辑

2012年5月11日

摘要: 已知strcpy函数的原型是char* strcpy(char* strDest,const char* strSrc);1.不调用库函数,实现strcpy函数2.解释为什么要返回char*;1.strcpy的实现代码char* strcpy(char* strDest,const char* strSrc){if((strDest == NULL) || (strSrc == NULL))//[1] throw "Invalid Arguments";//[2]char* strDestCopy = strDest;//[3]while((*strDest++ = *st 阅读全文
posted @ 2012-05-11 10:47 温柔的暴力 阅读(1404) 评论(0) 推荐(0) 编辑

2012年5月9日

摘要: 在C/C++中栈区由编译器自动分配和释放,存放函数的参数值,局部变量的值等,操作方式类似于数据结构中的栈;堆区一般由程序员自己分配和释放,若程序员不释放,程序结束后可能由操作系统回收。它与数据结构中的堆是两码事,分配方式倒是类似于链表区别:1.申请方式:栈:系统自动分配。堆:程序员自己申请,并指明大小,在C中用malloc函数,C++中用new操作符。p=(char *)malloc(10);//注意,p本身是在栈区2.申请后系统的响应:栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时 阅读全文
posted @ 2012-05-09 21:44 温柔的暴力 阅读(773) 评论(0) 推荐(0) 编辑

2012年5月8日

摘要: 解决思想:根据前序遍历的结果得到树根(包括子树)将中序遍历的结果划分成左右子树,来进行递归#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct Node{ char chValue; struct Node *lChild; struct Node *rChild;}Node;//重建二叉树void Rebuild(char*pPreOrder , char*pInOrder , Node **pRoot , int nTreeLen){ int nLeftLen... 阅读全文
posted @ 2012-05-08 10:03 温柔的暴力 阅读(583) 评论(0) 推荐(0) 编辑

导航