自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chensidney‘s blog

Share More

  • 博客(18)
  • 收藏
  • 关注

原创 《编程之美》学习笔记——2.21只考加法的面试题

一、问题我们知道:1 + 2 = 3;4 + 5 = 9;2 + 3 + 4 = 9;等式两边都是两个以上的连续的自然数相加,那么是不是所有的整数都可以写成这样的形式呢?稍微考虑一下,我们发现,4、8等数并不能写成这样的形式。问题1:写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。问题分析:输入:Sum(64位正整数),可转化为:

2015-01-26 14:05:11 940

原创 查找专题——二分搜索及其拓展

一、二分查找(折半搜索)(binary search / half-interval search)思想:算法采用分治思想(divide and conquer algorithm),二分查找从表中间开始查找目标元素。如果找到一致元素,则查找成功。如果中间元素比目标元素小,则仍用二分查找方法查找表的后半部分(表是递增排列的),反之中间元素比目标元素大,则查找表的前半部分。输入:查找表必

2015-01-24 19:27:31 839

原创 数据结构专题——树

一、树(Tree)定义(参考维基百科: http://en.wikipedia.org/wiki/Tree_%28data_structure%29):A tree is a (possibly non-linear) data structure made up of nodes or vertices and edges without having any cycle. Th

2015-01-22 16:49:19 511

原创 数据结构专题——队列

一、队列(queue)思想:队列实现的是一种先进先出(first-in,first-out,FIFO)策略。(《算法导论》)定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。(《大话数据结构》)

2015-01-22 15:55:38 896

原创 数据结构专题——栈

一、栈(stack)(可与队列对比进行学习)思想:栈实现的是一种后进先出(last-in,first-out,LIFO)策略。(《算法导论》)定义:栈是限定仅在表尾进行插入和删除操作的线性表(具有线性关系/前驱后继关系)。(《大话数据结构》)术语:栈的两端:栈顶(top):允许插入和删除操作的一端。栈底(bottom):不允许插入和删除的一端。(栈特点:栈底是固定的,最先进栈的只能

2015-01-21 15:31:39 688

原创 数据结构专题——线性表

一、线性表及其分类(定义部分参考自《大话数据结构》及维基百科)线性表(List / Linear List):零个或多个数据元素的有限序列。线性表的基本操作(涉及算法中方法实现):  线性表初始化;  求线性表长度;  获取元素操作;  查找元素操作;  插入元素操作;  删除元素操作;其他:判断线性表是否为空;清空线性表;线性表可以存储结构特点

2015-01-19 15:27:44 860

原创 《编程之美》学习笔记——2.12快速寻找满足条件的两个数

一、问题  能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。 问题分析:  输入:一个长度为N的数组和一个给定的数X。  输出:数组中的两个数字A和B。  约束:X = A + B,且A和B至少存在一组。  其他:题目中只说了数字,说明这些数可能为正整数、负整数、零或浮点数等,不太可能通过给

2015-01-18 19:27:39 602

原创 《编程之美》学习笔记——2.6精确表达浮点数

一、问题  在计算机中,使用float或者double来存储小数是不能得到精确值的。如果你希望得到精确计算结果,最好是用分数形式来表示小数。有限小数或者无限循环小数都可以转化为分数。比如:    0.9 = 9/10    0.333(3)= 1/3(括号中的数字表示是循环节)    当然一个小数可以用好几种分数形式来表示。如:    0.333(3)= 1/3 = 3/9

2015-01-18 15:12:53 883

原创 数学与编程——求余、取模运算及其性质

一、求余运算(Remainder)(参考维基百科: http://zh.wikipedia.org/wiki/余数  http://en.wikipedia.org/wiki/Remainder http://en.wikipedia.org/wiki/Euclidean_division http://zh.wikipedia.org/wiki/同余)Euclidean

2015-01-18 12:19:36 15792 2

原创 《编程之美》学习笔记——2.7最大公约数问题

一、问题  求两个正整数的最大公约数。如果两个正整数都很大,有什么简单的算法吗?问题分析:什么是最大公约数? (参考维基百科:http://en.wikipedia.org/wiki/Greatest_common_divisor)最大公约数:Greatest Common Divisor (GCD); greatest common factor (gcf);highest

2015-01-14 19:45:07 985

原创 《编程之美》学习笔记——2.17数组循环移位

一、问题设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。问题分析: 输入:长度为N的原数组,K 输出:循环右移K位后的数组 约束:时间复杂度要求O(N),且只允许两个附加变量二、解法  版本一:数组中的每个元素一次移到位(利用数据移位的变化规律)  思考:既然时间复杂度要求时O(n),且只允许两个附加变量,

2015-01-13 15:57:37 845

原创 《编程之美》学习笔记——2.10寻找数组中的最大值和最小值

一、问题对于一个由N个整数组成的数组,需要比较多少次才能把最大值和最小值的数找出来呢?问题分析:输入:一个有限长度且为N的数组。输出:该数组的最大值max和最小值min。特点:最大值和最小值都要找到,可以考虑它们之间的关系;这个问题在《编程之美》中侧重解决尽可能减少算法内部比较次数的这个问题。结合学习:《算法导论》(第九章 中位数和顺序统计量 第一节 最小值和最大值) 文章给出了更精确的比较次数,因为这里给出了精确的比较次数(与数组长度奇数偶数相关),《编程之美》中的数据都是假设数组

2015-01-13 09:20:41 886

原创 《编程之美》学习笔记——2.3寻找发贴“水王”

一、问题 Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗?问题分析: 输入:给入一个含有重复数据的ID数组 输出:重复次数最高的ID 约束:重复次数最高的ID个数超过总数的一半。

2015-01-12 11:21:58 596

原创 《编程之美》学习笔记——2.2不要被阶乘吓倒

一、问题  1、给定一个整数N,那么N的阶乘N!末尾有多少个0?  例子:10!=3 628 800,则 N!的末尾有两个0。  2、求N!的二进制表示中最低位1的位置。二、问题1解法  版本一:(自己思考的方案)数学规律解法  首先,我们可以考虑的数学规律上去寻找末尾0的个数:对于个位数之间相乘能够给出0结尾的乘法有:5*(2/4/6/8),而二位数中10 = 2

2015-01-11 20:39:16 589

原创 排序专题学习笔记——插入排序

插入排序(Insertion sorts)专题  这类算法通过在序列内插入并批量移动元素对序列进行排序。  下面介绍的算法实现中,排序输出的结果均是由小到大排列,只要稍微修改下代码(主要是判断语句)都可以使得输出序列的结果由大到小排列。1.插入排序 Insertion sort算法(参考维基百科:http://en.wikipedia.org/wiki/Insertion_so

2015-01-10 23:12:44 827

原创 排序专题学习笔记——交换排序

交换排序(Exchange sorts)专题这类算法通过在序列内元素之间的进行比较并交换元素对序列进行排序:冒泡排序,鸡尾酒排序,奇偶排序,梳排序,侏儒排序/地精排序,快速排序

2015-01-07 11:29:17 800

原创 《算法导论》学习笔记——钢条切割,斐波那契数列(动态规划)

一、动态规划动态规划思想:通过子问题求解原问题,应用于子问题重叠的情况。动态规划特点:1.最优子结构2.重叠子问题动态规划步骤:1.刻画一个最优解的结构特征。2.递归地定义最优解的值。3.计算最优解的值,通常采用自底向上的方法。4.利用计算出的信息构造一个最优解。动态规划实现方法:1.带备忘的自顶向下法2,自底向上法分治法与动态规划法比较

2015-01-04 19:10:50 1663

原创 《算法导论》学习笔记——最大子数组(分治策略,动态规划)

一、分治策略分治法的思想    将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。递归式    递归式与分治方法是紧密相关的,因为使用递归式可以很自然地刻画分治算法的运行时间。在分治策略中,我们递归地求解一个问题,在每层递归中应用如下的三个步骤:    分解:将问题划分为一些子问题,子问题的形式与原问题一样,只

2015-01-04 10:42:51 2580

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除