代码改变世界

算法——动态规划

2012-12-26 19:33 by msfte, 181 阅读, 0 推荐, 收藏, 编辑
摘要:1,编程之美1.4买书问题上柜的《哈利波特》平装本系列,一共有五卷。假设每一卷单独销售均需8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下: 本数2 折扣 5% 本数3折扣 10% 本数4折扣 20% 本数 5 折扣25%问题:设计出算法,能够计算出读者所购买的一批书的最低价格。备忘录算法:class BuyBook { public void Run() { var result = DynamicProgramming(new int[] { 2,2,2,1,1}); } ... 阅读全文

算法——数字(3.5%)

2012-12-18 15:17 by msfte, 236 阅读, 0 推荐, 收藏, 编辑
摘要:1,求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。2,求Fibonacci第N项 class F { public void Run() { int result = DynamicProgramming(10); } private int DynamicProgramming(int n) { if (n <= 0) return 0; ... 阅读全文

算法——排序

2012-12-18 15:16 by msfte, 197 阅读, 0 推荐, 收藏, 编辑
摘要:1,插入排序 void InsertionSort(int[] array){} public void InsertionSort(int[] array) { int[] sortedArray = new int[array.Length]; sortedArray[0] = array[0]; for (int i = 1; i < array.Length; i++) { for (int j = i - 1... 阅读全文

算法——海量数据(5%)

2012-12-18 15:14 by msfte, 817 阅读, 0 推荐, 收藏, 编辑
摘要:1,有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m个记录。2,大量的URL字符串,如何从中去除重复的,优化时间空间复杂度3,设计一个系统处理词语搭配问题,比如说中国和人民可以搭配,则中国人民人民中国都有效。要求:*系统每秒的查询数量可能上千次;*词语的数量级为10W;*每个词至多可以与1W个词搭配当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息。4,有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。5,大整数数相乘的问题。6,一个url指向的页面里面有另一个url,最终有一 阅读全文

算法——树(10%)

2012-12-18 15:13 by msfte, 294 阅读, 0 推荐, 收藏, 编辑
摘要:1,把二元查找树转变成排序的双向链表(树)2,在二元树中找出和为某一值的所有路径(树)3,输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。4,求二叉树中节点的最大距离5,输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:8/\6 10/\/\5 7 9 11输出:8/ \10 6/\/\11 9 7 5 static void frontOrderMirror(Node root) { if (root == null) retur... 阅读全文

算法——栈和队列(3.7%,1.2%)

2012-12-18 15:13 by msfte, 216 阅读, 0 推荐, 收藏, 编辑
摘要:1,设计包含min函数的栈(栈)2,栈的push、pop序列(栈)题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。3,实现 阅读全文

算法——链表(14%)

2012-12-18 15:12 by msfte, 335 阅读, 0 推荐, 收藏, 编辑
摘要:1,把二元查找树转变成排序的双向链表(树)2,判断俩个链表是否相交(链表可能有环,求出俩个链表相交的第一个节点)3,颠倒一个链接表的顺序。(递归非递归)4,输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 5,链表操作,单链表就地逆置,6,一串首尾相连的珠子(m个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。7,请修改append函数,利用这个函数实现(链表):两个非降序链表的并集,1->2->3 和2->3->5 并为1->2->3->5另外只能输出结果,不能修改 阅读全文

算法——字符串(22%)

2012-12-18 15:11 by msfte, 635 阅读, 0 推荐, 收藏, 编辑
摘要:1,颠倒一个字符串。2,颠倒一个句子中的词的顺序,比如将"我叫克丽丝"转换为"克丽丝叫我",3,找到一个子字符串。4,比较两个字符串,用O(n)时间和恒量空间。5,翻转句子中单词的顺序。题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入"I am a student.",则输出"student. a am I"。6,在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。7,输入一个表示整数的字符串,把 阅读全文

算法——数组和Hash(30%)

2012-12-18 15:10 by msfte, 1667 阅读, 0 推荐, 收藏, 编辑
摘要:1,求子数组的最大和(数组)分析:1)枚举:遍历每个子数组,比较并记录最大的2)分治:从中间分开,有三种情况:(1)最大子数组在左边,(2)最大子数组在右边,(3)最大子数组包括中间的元素。T(n)=2T(n/2)+O(n): O(nlogn)3)动态规划:(1)子结构:从开始到当前元素。(2)子结构Cache:1,内部最大值。2包含当前元素的最大值。(3)状态转移:1,如果前一个子结构的Cache2为负,当前则Cache2为当前元素,否则为前一元素Cache2加当前元素。2当前Cache1为当前Cache2和前一元素Cache1较大者。 O(n)代码:1)枚举 private ... 阅读全文