![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之美学习笔记
liangsc94
渴望变得出色,强大
展开
-
编程之美:中国象棋将帅问题(开篇)
这学期打算准备面试,不过我不是科班出身,学的东西也比较杂乱,估计只能在数据结构上突出点优势了。因此打算把MS出版的那本编程之美研读一下,这是我学习的笔记。欢迎讨论和交流。 问题引入:假设一副棋盘上只有“将”和“帅”两个棋子。如下图所示: 用A表示“将”,B表示“帅“。现在的问题是:请写一个程序,输出所有A,B合法的位置(即A和B不能同时原创 2015-03-18 22:30:48 · 898 阅读 · 0 评论 -
求二进制中1的个数
问题描述:对于1个字节(8bit)的无符号整形变量,求其二进制表示中1的个数,要求算法的执行效率尽可能的高。 例子:输入7,二进制表示为:0000 0111,则二进制表示中1的个数为3 解法1:最直接的解决办法就是把10进制转化为二进制,然后看有几个1原创 2015-03-30 18:37:50 · 782 阅读 · 0 评论 -
編程之美2.9:神奇的菲波那契數列
只要是聽說過遞歸,學過一點數據結構的人都聽過這個數列。其實高二數學課上也有,不過那時候我還在受馬克思主義的薰陶,不知編程爲何物。好了,據說這個數列源於一對繁殖能力特別驚人的兔子。 其實這個就是一個遞推公式:F(n)=⎧⎩⎨01F(n−1)+F(n−2)n = 0;n = 1;n>=2F(n)=\begin{cases}0 & \mbox {n = 0;}\\1 & \mbox {n = 1;原创 2015-07-25 17:01:12 · 596 阅读 · 0 评论 -
编程之美2.17之数组循环移位
题目描述:设计一个算法,把一个含有N个元素的数组循环右移K位,要求算法的时间复杂度位O(Log2N)O(Log_2N),且只允许使用两个附加变量。 什么意思呢,就是说如果输入序列为:abcd1234,右移2位即变为34abcd12。唯一的要求就是使用两个附加变量。 其实这道题编程珠玑上面也出现过,书中给出的一种符合题意的解法是巧妙地进行翻转。以把abcd1234右移4位为例:第一步:翻转1234原创 2015-08-14 09:25:47 · 815 阅读 · 0 评论 -
编程之美2.4——“1”的数目
题目描述:给定一个正整数N,写出1到N(包含N)的所有正整数,然后数一下其中出现的所有N的个数。 举个例子,假设你输入的是11,则1到11的所有正整数为: 1,2,3,4,5,6,7,8,9,10,11 其中1出现了四次(1,10,11),请编写一个程序完成这个任务。 最暴力的解法这里不用说,因为如果面试的话肯定会死,微软的面试要是写出这种代码就能活下来也太容易了。 当我第一次看到这道题时原创 2015-09-12 15:00:41 · 824 阅读 · 0 评论 -
两道简单的笔试题
今天做了一个公司的笔试题,不过其实第二道我之前在编程之美上就看到过,不过考试时没写出来。第一道题如下: 有一个数组arr,长度为len;现有a,b。0=<a<=b<=len-1 请编写一个程序,找出arr[b]-arr[a]的最大值。 举例: [1015]\begin{bmatrix}10 & 15\end{bmatrix} 输出:0 这个我当时第一感觉就是有点类似最大子数组之和的。不原创 2015-10-17 19:17:31 · 1175 阅读 · 4 评论 -
编程之美变形记——“49”的个数
昨天在杭电poj上看到一个道题。题目总结出来就是,给定一个正整数N,求出从1到N(包含N)之间49出现的个数。举例:如N=101则1到101之间101个数中,49出现一次。同时,409,4009(这样的数字不合法)。看到第一眼就想起来编程之美2.4有一道求“1”的个数的题目,这道题其实就是把“1”换成了49。我第一眼想到的是用49进制,不过仔细考虑一下之后是不合适的。然后想了一个小时左右没想出来。虽原创 2015-09-30 19:45:06 · 559 阅读 · 0 评论