2012年4月26日
摘要: 今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积。输入的数字可能超过计算机内整形数据的存储范围。分析:由于数字无法用一个整形变量存储,很自然的想到用字符串来表示一串数字。然后按照乘法的运算规则,用一个乘数的每一位乘以另一个乘数,然后将所有中间结果按正确位置相加得到最终结果。可以分析得出如果乘数为A和B,A的位数为m,B的位数为n,则乘积结果为m+n-1位(最高位无进位)或m+n位(最高位有进位)。因此可以分配一个m+n的辅存来存储最终结果。为了节约空间,所有的中间结果直接在m+n的辅存上进行累加。最后为了更符合我们的乘法运算逻辑,可以讲数字逆序存储,这样数字 阅读全文
posted @ 2012-04-26 22:56 Jason Yang 阅读(22872) 评论(2) 推荐(5) 编辑
  2012年4月22日
摘要: 字符串循环移位问题是面试中比较容易遇到的,就是输入一个字符串和一个整数,原地输出移位后的字符串。不同的考官可能对程序的具体要求不同,这里要求空间复杂度为O(1)。这里给出两种解答方法。(1)将移动n位看做“每次移动一位,共操作n次”,这是一种化整为零的思维方法。只要能想到这一步,相信下面的代码就不难写出了: 1 void shift_1(char* str) 2 { 3 int len = strlen(str); 4 if(len <= 1) 5 return; 6 char temp = str[len-1]; 7 for(int i=len... 阅读全文
posted @ 2012-04-22 22:34 Jason Yang 阅读(3865) 评论(2) 推荐(5) 编辑
  2012年4月19日
摘要: 刚体验了一下微软的面试,总共历时1个半小时,结果估计悲剧了。问到的和算法相关的问题有以下几个:1、字符串循环移位程序编程实现,比如shift("abcde",2), 输出“deabc”.难点在于要求原地移位,空间复杂度为O(1),时间复杂度不做要求2、链表中删除一个结点void delete(ListNode* pHead, ListNode* p)这里链表可能不是正常的,比如存在环,就是有某个结点指回到前面出现的结点去了,存在环且查找节点p失败时必须判断是否出现环,否则程序可能死循环,要求O(1)空间复杂度3、字符串中查找子字符串的位置int find(char *str 阅读全文
posted @ 2012-04-19 16:58 Jason Yang 阅读(636) 评论(0) 推荐(0) 编辑
  2012年4月15日
摘要: C语言关键字const是用来限定一个变量不允许被改变的修饰符,当它和指针结合的时候有下面2种情况:1、const放在*前面, const char *p1, p1表示指向常量的指针,这时p1本身可以变化,也就是可以重新指向,但是指向的内容不能修改const char *p1 = "hello";p1++; // okp1[0] = 'w'; // compile error2、const放在*后面, char* const p1, 意思是p1是一个const指针,指向一个字符串,这时p1本身不能改变但是指向的内容可以变化,也就是如下代码1 char* con 阅读全文
posted @ 2012-04-15 21:52 Jason Yang 阅读(1486) 评论(4) 推荐(0) 编辑
  2012年4月14日
摘要: 看到一篇博文上讲到用Python写自动访问博客的功能,里面的核心功能就是抓取网页中的链接,类似一个网页爬虫工具。正好我刚学习Python,就决定自己练习一下。写了一下,原本觉得很简单的东西,搞了半天才终于搞定,看来纸上得来终是浅,勤加实践才是王道。虽然花了不少时间,但是感觉自己收获还是蛮大的。这段代码的知识点包括以下几个:列表的使用;自定义全局函数的写法;自定义类及继承类的写法;标准模块的使用异常处理下面看代码。先是导入用到的标准模块:import html.parser as parserimport urllib.request然后是分析网页中网址的类定义: 1 class MyHtmlP 阅读全文
posted @ 2012-04-14 22:26 Jason Yang 阅读(3888) 评论(0) 推荐(0) 编辑