自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冰殇的博客

「Talk is cheap. Show me the code」

  • 博客(194)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 其他题目---画匠问题

【题目】  给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个正数num表示画匠的数量,每个画匠只能画连在一起的画作。所有的画匠并行工作,请返回完成所有的画作需要的最少时间。【基本思路】  方法一。如果画匠的数量大于画作的数量,每个人完成一幅画就是最优解,即返回arr中的最大值。如果只有一个画匠,那么对于这个画匠来说,arr[0…j]上的画作最少时间就是arr[0

2017-11-12 19:36:21 809

原创 其他题目---丢棋子问题

【题目】  一座大楼有0~N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会摔碎(1≤i≤N1\le i\le N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层,即使在最差的情况下扔的最少次数。一次只能扔一个棋子。【基本思路】  方法一。递归。假设递归函数P(N, K)的返回值是N层楼有K个棋子在最差情

2017-11-12 14:04:03 1288 1

转载 图解 Python 深拷贝和浅拷贝

Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。下面本文就通过简单的例子介绍一下这些概念之间的差别。对象赋值直接看一段代码:wilber = willprint id(will)print willprint [id(ele) for ele in will]print id(wilber)print wilberprint [i

2017-11-12 11:58:50 226

原创 其他题目---Manacher算法

【题目】  给定一个字符串str,返回str中最长回文子串的长度。要求时间复杂度O(N)。【进阶题目】  给定一个字符串str,想通过添加字符的方式使得str整体都变成回文字符串,但要求只能在str的末尾添加字符,请返回在str后面添加的最短字符串。要求时间复杂度O(n)。【代码实现】#python3.5#原问题def manacherString(string): res = [0 f

2017-11-10 10:45:02 392

原创 其他题目---KMP算法

【题目】  给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有子串match,则返回match在str中的开始位置,不含有则返回-1。【代码实现】#python3.5def getIndexOf(strS, strM): def getNextArray(str1): if len(str1) == 1: ret

2017-11-10 10:27:46 432

原创 其他题目---出现次数的TopK问题

【题目】  给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印出现次数前k名的字符串。要求时间复杂度O(Nlogk)。【进阶题目】  设计并实现TopKRecord结构,可以不断地向其中加入字符串,并且可以根据字符串出现的情况随时打印加入次数最多的前k个字符串,具体为:  1.k在TopKRecord实例生成时指定,并且不再变化(k是构造函数的参数)。    2.含有ad

2017-11-09 22:07:39 2147

原创 其他题目---两个有序数组间相加和的TopK问题

【题目】  给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数组。要求时间复杂度O(klogk)。【基本思路】  使用大根堆结构。假设arr1的长度是M,arr2的长度是N。因为是排序数组,arr1中最后一个数加上arr2中最后一个数一定就是最大的相加和。将这个数压入大根堆中。然后从大根堆中弹出一个堆顶,此时这个堆顶一

2017-11-09 16:46:14 2943

原创 其他题目---在两个排序数组中找到第K小的数

【题目】  给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数。要求时间复杂度O(log(min{M,N})),额外空间复杂度O(1)。【基本思路】  在解决这道题之前,先解决一个小问题:在两个长度相等的排序数组中找到上中位数。本题也深度利用了这个问题的解法。以下的getUpMedian方法的功能就是,在a1[s1…e1]和a2[s2…e2]两段长度相等的范围上找上中位数

2017-11-08 10:51:18 1445 1

原创 其他题目---在两个长度相等的排序数组中找到上中位数

【题目】  给定两个有序数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。要求时间复杂度O(logN),空间复杂度O(1)。【基本思路】  看到时间复杂度为O(logN),很容易想到二分查找。过程如下:如果每个数组中只有一个元素,较小的那个元素就是整体的上中位数,如果两个元素相等,随便返回哪个都可以。如果数组中不止一个元素,找到两个数组的中间位置mid1和mid2。

2017-11-06 22:16:35 1495

原创 其他题目---随时找到数据流的中位数

【题目】  有一个源源不断地吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。【要求】如果MedianHolder已经保存了吐出的N个数,那么任意时刻将一个新数加入到MedianHolder的过程,其时间复杂度O(logN)。取得已经吐出的N个数整体的中位数的过程,时间复杂度O(1)。【

2017-11-06 09:41:54 1719

原创 其他题目---设计一个没有扩容负担的堆结构

【题目】  堆结构一般是使用固定长度的数组结构来实现的。这样的实现虽然足够经典,但存在扩容的负担,比如不断向堆中增加元素,使得固定数组快耗尽时,就不得不申请一个更大的固定数组,然后把原来数组中的对象复制到新的数组中完成堆的扩容,所以,如果扩容时堆中的元素个数为N,那么扩容行为的时间复杂度为O(N)。请设计一种没有扩容负担的堆结构,即在任何时刻有关堆的操作时间复杂度都不超过O(logN)。【要求】没

2017-11-06 09:14:48 566

转载 用于分类/特征提取的CNN结构设计方法总结

<div class="markdown_views"><h2 id="说明"><a name="t0"></a>说明</h2>最近在用CNN做一个人脸识别的项目,为了吸收前人经验,设计一个比较好用的网络,把2012(AlexNet)、2014(VGGNet、GoogLeNet)、2015(ResNet)、2016这几年在ImageNet上取得好成绩的文章都撸了一遍,写了一点总结。根据导师要求,全

2017-11-02 21:23:38 1706

原创 其他题目---一种消息接受并打印的结构设计

【题目】  消息流吐出2,一种结构接收而不打印2,因为1还没出现。   消息流吐出1,一种结构接收1,并且打印:1,2。   消息流吐出4,一种结构接收而不打印4,因为3还没有出现。   消息流吐出5,一种结构接收而不打印5,因为3还没有出现。   消息流吐出7,一种结构接收而不打印7,因为3还没有出现。   消息流吐出3,一种结构接收3,并且打印:3,4,5。   消息流吐出9,一种结

2017-11-02 21:03:22 493

原创 其他题目---分糖果问题

【题目】  一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:   1、每个孩子不管得分多少,起码分到1个糖果   2、任意两个相邻的孩子之间,得分较多的孩子必须多拿一些糖果  给定一个数组arr代表得分数组,请返回最少需要多少糖果。   例如:arr = [1,2,2],糖果分配[1,2,1],即可满足要求且数量最少,所以返回4.【进阶题目】  原题目中的两个规则不变,再加一条规则:

2017-11-02 18:16:58 4140

原创 其他题目---数字的英文表达和中文表达

【题目】  给定一个32位整数n,写两个函数分别返回n的英文与中文表达字符串。【基本思路】  该类型的题目通常是由小的,简单的场景出发,把复杂的事情拆解成简单的场景。  英文表达的实现。英文的表达是以三个数为一组的,所以只要能表达出1~999,然后将数字分解成十亿组,百万组,千组,1~999组,每组都用1~999表达再把组与组之间各自的表达字符串连接起来即可。如何实现1~999的表达?从简单场景出发

2017-11-01 11:05:21 1335

原创 其他题目---在有序旋转数组中找到一个数

【题目】  有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1,2,3,4,5,6,7],可以旋转处理成[4,5,6,7,1,2,3]等。给定一个可能旋转过的有序数组arr,再给定一个数n,返回arr中是否含有n。【基本思路】  尽可能的利用二分查找,但是最坏情况仍然无法避免O(N)的时间复杂度。首先需要知道,如果一个有序数组经过旋转后,只有一个位置会出现降

2017-10-31 09:42:49 1310

原创 其他题目---在有序旋转数组中找到最小值

【题目】  有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1,2,3,4,5,6,7],可以旋转处理成[4,5,6,7,1,2,3]等。给定一个可能旋转过的有序数组arr,返回arr中的最小值。【基本思路】  尽可能的利用二分查找,但是最坏情况仍然无法避免O(N)的时间复杂度。首先需要知道,如果一个有序数组经过旋转后,最小的值一定是数组中降序的那个位置,其

2017-10-30 22:43:47 559

原创 其他题目---判断一个数是否是回文数

【题目】定义回文数的概念如下:如果一个非负数左右完全对应,则该数是回文数,例如:121,22等如果一个负数的绝对值左右完全对应,也是回文数,例如:-121,-22等给定一个32位整数num#python3.5def isPlindrome(num): if num == -(1 << 31): return False num = abs(num) b

2017-10-30 14:55:00 1139

原创 其他题目---从N个数中等概率打印M个数

【题目】  给定一个长度为N且没有重复元素的数组arr和一个整数m,实现函数等概率随机打印arr中的M个数。【要求】相同的数不要重复打印时间复杂度O(M),空间复杂度O(1)可以改变arr数组【基本思路】  具体过程如下:  1、在arr[0…N-1]中随机得到一个位置a,然后打印arr[a]。   2、把arr[a]和arr[N-1]交换。   3、在arr[0…N-2]中随机得到一个

2017-10-30 14:47:05 538 1

原创 其他题目---1到n中1出现的次数

【题目】  给定一个整数n,返回1到n的数字中1出现的个数。   例如:   n = 5,1~n为1,2,3,4,5。那么1出现了1次,所以返回1。   n = 11,1~n为1,2,3,4,5,6,7,8,9,10,11。1出现了4次,返回4。【基本思路】  方法一。暴力的方式,逐个检查每个数字中1的个数,十进制的整数N有logN位,所以考察一个整数含有多少个1的代价是O(logN),一共有

2017-10-27 12:01:23 427

原创 其他题目---一种字符串和数字的对应关系

【题目】  一个char类型的数组chs,其中所有的字符都不同。   例如,chs = [‘A’, ‘B’, ‘C’, …’Z’],则字符串与整数的对应关系如下:   A,B,C…Z,AA,AB…AZ,BA,BB…ZZ,AAA…ZZZ,AAAA…   1,2,3…26,27,28…52,53,54…702,703…18278,18279   例如,chs = [‘A,’ ‘B’, ‘C’],

2017-10-26 15:44:18 1275

原创 其他题目---正数数组的最小不可组成和

【题目】  给定一个正数数组arr,其中所有的值都是整数,以下是最小不可组成和的概念:把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的记为max。在区间[min, max]上,如果有数不可以被arr每一个子集相加得到,那么其中最小的那个数就是arr的最小不可组成和。在区间[min, max]上,如果所有的数都可以被arr的某一个子集相加得到,那么max + 1是ar

2017-10-26 10:38:40 475

原创 其他题目---路径数组变为统计数组

【题目】  给定一个路径数组paths,表示一张图。paths[i] == j代表城市i连向城市j,如果paths[i] == i,则表示城市i是首都,一张图里只会有一个首都且图中除首都指向自己之外不会有环。   例如:paths={9,1,4,9,0,4,8,9,0,1} 由这个数组表示的图如下图所示。   城市1是首都所以距离为0;离首都距离为1的城市只有城市9;离首都距离为2的城市有城

2017-10-25 10:32:00 575

原创 其他题目---调整[0,x)区间上的数出现的概率

【题目】假设函数random()等概率随机返回一个在[0, 1)范围上的数,那么我们知道,在[0, x)区间上的数出现的概率为x(0#python3.5def randXPowerK(k): if k < 1: return 0 res = -1 for i in range(k): res = max(res, random.random(

2017-10-25 08:43:28 503

原创 其他题目---设计RandomPool结构

【题目】  设计一种结构,在该结构中有如下三个功能:   1、 insert(key):将某个key加入到该结构,做到不重复加入    2、delete(key):将原本在结构中的某个key移除    3、getRandom():等概率随机返回结构中的任意一个key  要求所有的操作时间复杂度都是O(1)。【基本思路】  对每个元素都加上一个下标,第一个元素的下标为0,每加入一个元素,对应的下标

2017-10-19 17:31:50 647 2

原创 其他题目---设计可以变更的缓存结构

【题目】  设计一种缓存结构,该结构在构造时确定大小,假设大小为K,并有两个功能:set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值【要求】set和get的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最经常使用的当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的

2017-10-19 16:45:59 416

原创 其他题目---最大的leftMax与rightMax之差的绝对值

【题目】  给定一个长度为N(N>1)的整型数组arr,可以划分成左右两个部分,左部分为arr[0…k],右部分为arr[k+1…N],k可以取值的范围是[0…N-2]。求这么多划分方案中,左部分中的最大值减去右部分的最大值的绝对值中,最大是多少?【基本思路】  方法一。   时间复杂度O(N2N^2),空间复杂度O(1)。这是最笨的方法,从左到右遍历一次,对每一个位置都遍历一遍它的左边和右边。#

2017-10-18 17:34:27 459

原创 其他题目---设计有setAll功能的哈希表

【题目】  哈希表常见的三个操作是put、get和containsKey,而且这三个操作的时间复杂度为O(1)。现在想加一个setAll功能,就是把所有的记录的value值都设成统一的值。请设计并实现这种有setAll功能的哈希表,并且put、get、containsKey和setAll四个操作的时间复杂度都为O(1)。【基本思路】  加入时间戳。  1、把每一个记录都加上一个时间,标记每条记录是合

2017-10-18 16:55:39 820

原创 其他题目---蓄水池算法

【题目】  有一个机器按自然数顺序的方式吐出球(1号球、2号、3号…),你有一个袋子,袋子最多只能装下K个球,并且除此之外你没有更多的空间。设计一种选择方式,使得当机器吐出第N号球的时候(N > K),你袋子中球的个数是K个,同时保证从1号球到N号球中的每一个,被选进袋子的概率是K/N。【基本思路】  这道题的核心解法就是蓄水池算法。过程如下:   1、将第1~k个球直接放入袋子   2、处理第

2017-10-18 09:27:36 681

原创 其他题目---折纸问题

【题目】  把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折一次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的地方指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。     例如:   N = 1时,打印:   Down   N

2017-10-18 08:15:41 796

原创 其他题目---判断一个点是否在三角形内部

【题目】  在二维坐标系中,所有的值都是double型,那么一个三角形可以由三个点来代表,给定三个点代表的三角形,再给定一个点(x, y),判断(x, y)是否在三角形中。【基本思路】  方法一。   等面积法。如果一个点在三角形内部,那么以该点为顶的三个小三角形的面积和应该等于大三角形的面积。如果这个点在三角形的外部,那么三个小三角形的面积和要大于大三角形的面积。知道三个点,如何求该三个点为顶点

2017-10-17 11:59:27 2946

原创 其他题目---判断一个点是否在矩形内部

【题目】  在二维坐标系中,所有的值都是double型,那么一个矩形可以由四个点来代表,(x1, y1)为最左的点,(x2, y2)为最上的点,(x3, y3)为最下的点,(x4, y4)为最右的点。给定4个点代表的矩形,再给定一个点(x, y),判断(x, y)是否在矩形中。【基本思路】  首先解决矩形的各条边和坐标轴平行的情况,解决该问题只需要判断点(x, y)是否越界即可。def isInsi

2017-10-17 10:42:03 5023

原创 其他题目---从5随机到7随机及其扩展

【题目】  给定一个等概率产生1~5的随机函数 rand1To5如下:def rand1To5(): return int(random.random()*5) + 1  初除此之外,不使用任何额外的随机机制,请用rand1To5实现等概率随机产生1~7的随机函数rand1To7。【补充题目】  给定一个以p概率产生0,以1-p概率产生1的随机函数rand01p如下:def rand01p(

2017-10-17 09:44:09 485

原创 其他题目---有关阶乘的两个问题

【题目】  给定一个非负整数N,返回N!结果的末尾为0的数量。   例如:3! = 6,结果的末尾没有0,所以返回0。5! = 120,结果的末尾有1个0,返回1。1000000000!,结果的末尾有249999999998个0,返回2499999998。【进阶题目】  给定一个非负整数N,如果用二进制数表达N!的结果,返回最低位的1在哪个位置上,认为最右边的位置为位置0.   例如:1! =

2017-10-14 23:11:25 589

原创 其他题目---一行代码求两个数的最大公约数

【题目】  给定两个不等于0的整数m和n,求m和n的最大公约数。【基本思路】  辗转相除法。用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。【代码实现】#python3.5def gcd(m, n): return m if n == 0 els

2017-10-14 21:47:35 517

原创 链表问题---环形单链表的约瑟夫问题

【题目】  据说著名犹太历史学家Josephus有过如下故事:在罗马人占领乔塔帕特后,39个犹太人和Josephus及他的朋友躲进一个洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第一个人开始报数,报数到3的人就自杀,再由下一个人重新报1,报数到3的人就自杀,这样依次下去,知道剩下最后一个人时,那个人可以自由选择自己的命运。这就是著名的约瑟夫问题。现在

2017-10-13 12:45:15 3437

原创 链表问题---反转部分单向链表

【题目】  给定一个单向链表的头节点head,以及两个整数start和end,在单向链表上把第start个节点到第end个节点这一部分进行反转。   例如:   1 -> 2 -> 3 -> 4 -> 5 -> null,start = 2,end = 4   调整结果为:1 -> 4 -> 3 -> 2 -> 5 -> null   再如:   1 -> 2 -> 3 -> null,s

2017-10-13 10:46:07 692

原创 链表问题---反转单向和双向链表

【题目】  分别实现反转单向链表和反转双向链表的函数。   要求,时间复杂度O(N),空间复杂度O(1)。【代码实现】#python3.5def reverseList(head): if head == None: return pre = None while head != None: next = head.next

2017-10-12 17:01:28 737

原创 链表问题---删除链表的中间节点和a/b处的节点

【题目】  给定链表的头节点head,实现删除链表的中间节点的函数。   例如:   1,不删除任何节点   1 -> 2,删除节点1   1 -> 2 -> 3,删除节点2   1 -> 2 -> 3 -> 4,删除节点2   1 -> 2 -> 3 -> 4 -> 5,删除节点3  进阶问题:   给定链表的头节点head,整数a和整数b,实现删除位于a/b处节点的函数。   例

2017-10-12 16:24:15 648

原创 链表问题---在单链表和双链表中删除倒数第K个节点

【题目】  在单链表和双链表中删除倒数第K个节点。   要求时间复杂度O(N),空间复杂度O(1)。【基本思路】  方法一。   从链表头开始走到尾,每移动一步,k减1。移动完之后,如果k > 0,说明链表长度不够k,根本就没有倒数第k个值,返回头节点 head;如果k = 0,说明链表的长度等于k,头节点就是倒数第k个节点,返回 head.next;如果 k < 0,说明链表的长度大于k,再次

2017-10-12 15:12:03 649

C语言常见的问题集

1.1 我如何决定使用那种整数类型? 如果需要大数值 (大于 32,767 或小于 −32,767), 使用 long 型。否则, 如果空 间很重要 (如有大数组或很多结构), 使用 short 型。除此之外, 就使用 int 型。如 果严格定义的溢出特征很重要而负值无关紧要, 或者你希望在操作二进制位和字 节时避免符号扩展的问题, 请使用对应的无符号类型。但是, 要注意在表达式中混 用有符号和无符号值的情况。 尽管字符类型 (尤其是无符号字符型) 可以当成 “小” 整型使用, 但由于不可预 知的符号扩展和代码增大有时这样做可能得不偿失。使用无符号字符型有所帮助; 类似的问题参见问题 12.1。 在选择浮点型和双精度浮点型时也有类似的权衡。但如果一个变量的指针必 须为特定的类型时, 以上规则不再适用。

2018-05-22

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

TA关注的人

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