![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日一题
文章平均质量分 68
wpandveil
这个作者很懒,什么都没留下…
展开
-
线性复杂度循环右移数组
题目:设计算法,实现一个对数组循环右移k个元素的函数,要求时间复杂度为O(n)解答:第一反应想到的是保存要右移的K个元素,然后将右边的N - K个元素左移,这样也可以做到O(n)的时间复杂度,但是空间复杂度是O(k)。这个方法符合题意,但是不够好。在有些题目中,对空间复杂度有进一步要求:只允许使用两个附加变量。这个时候,就只能使用下面代码的思路了,这个在编程珠矶里面有讲。思路为原创 2013-05-22 10:14:57 · 706 阅读 · 0 评论 -
链表面试题小结(待完成)
以下代码使用的公共结构:链表节点:struct ListNode{ int data; ListNode *next;};辅助函数://make a listListNode *makeList(int *arr, int n){ if(arr == NULL || n <= 0) return NULL; ListNode *phead = ne原创 2013-06-14 11:32:26 · 719 阅读 · 0 评论 -
堆排序
题目:使用堆排序对数组进行排序解答:堆排序(这里使用最大堆)的步骤是:使用maxHeapify函数对数组自底向上建堆将堆首第一个元素移到堆后,然后再使用maxHeapify生成新堆,堆的长度减1循环进行2,只到堆的长度为1堆排序的时间复杂度为O(n * logn),是不稳定排序。代码:#include #include using namespa原创 2013-06-06 14:51:04 · 479 阅读 · 0 评论 -
求序列的全排列
题目:给定一个序列,求出其全排列,并保证有序。例如字符串123的全排列是123,132,213,231,312,321。解答:递归解法。从第一个数开始的每一个数字与其后面的数字交换。如果序列中存在重复数据,比如122,则在交换之前看两个交换数字之间有没有与下标比较大的交换数字相等的数字,如果有的话,则不交换。比如122中,1与第二个2交换,发现中间有一个2,所以不交换,因为原创 2013-06-05 16:42:51 · 1002 阅读 · 0 评论 -
求一个数二进制表示中1的个数
题目:给定一个整型数据N,求数N的二进制表示中的1的个数解答:用1与N做与运算,可以检查N的最右位是否为1,将1左移一位,与N做与运算可以检查N的倒数第二最右位是否为1,同理检查N的所有位。若N为32位,则需要检查32次。N与N-1做与运算,N的最右一个为1的位将会变为0,按照这个思路编程,直到N为0,检查的次数为1的个数。例如二进制10110减1为10101,做与运算结果原创 2013-06-13 10:28:30 · 637 阅读 · 0 评论 -
求小于等于N的所有正整数里面包含的1的个数
题目:已知一个正整数N,求比N小(包括N)的所有正整数中包含的1的个数。例如N = 12,则包含5个1,分别为1、10、11、12解答:最直观最简单的想法是,从1到N对每一个数检查,得出每个数中包含的一的个数,事件复杂度大概是O(N)1时间复杂度比较高,不是最优算法。一个比1快的算法是:对N的每一位进行检查,得出比N小的正数某一位包含的1的个数总和。比如1234,千位包原创 2013-05-29 17:23:23 · 2421 阅读 · 1 评论 -
小飞的电梯调度算法
题目:(编程之美 1.8)一栋楼有6层,现在设计一种电梯调度算法:电梯在一楼让大家上电梯,然后根据大家选择要到的楼层算出某一楼层i,电梯在i层停下让所有人下电梯,然后大家爬楼梯达到自己的楼层。请问电梯停在哪一层,可以使得这一次的所有乘客爬楼层之和最短?解答:最简单的想法就是遍历每一层,依次求出每一层所有人爬楼总和,总和最小的那一层即是答案,这样的话时间复杂度就是O(N *原创 2013-05-28 09:37:45 · 980 阅读 · 0 评论 -
按层遍历二叉树
参考博客:http://www.cnblogs.com/miloyip/archive/2010/05/12/binary_tree_traversal.html题目:(编程之美 3.10)给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉数(每一层输出一行),每一层访问的顺序必须从左到右。解答:两种解法将树每一层节点保存到数组中,数组中使用begin和原创 2013-05-23 10:16:34 · 808 阅读 · 0 评论 -
编写正确的二分查找算法
题目:(编程之美 3.11)编写一个正确的二分查找算法,对一个升序的数组进行排序,若数组中有多个一样的,则返回下标最大的那个。解答:二分查找是一个最基本的算法,但是编写一个正确的二分查找算法还是不太容易,因为一步小心就容易造成一些小错误。《编程珠玑》第四章就专门介绍了“二分搜索的挑战”。如何返回下标最大的那个值的下标?只要保证在比较的时候,先比较value是不是比以mid为原创 2013-05-23 16:00:57 · 1128 阅读 · 0 评论 -
筛法求N以内所有质数
题目:打印出给定数N以内的所有质数解答:使用筛法求N以内的所有质数注意:使用bitmap可以减少使用的空间,降低空间复杂度代码:#include #include using namespace std;#define MAX 5000int array[MAX];//使用bitmapvoid setArray(int i)//设置bitma原创 2013-05-22 21:53:14 · 1396 阅读 · 0 评论 -
二叉树的前序遍历和中序遍历求二叉树
题目:已知某一个二叉树的前序遍历和中序遍历,求该二叉树的后续遍历。解答:前序遍历第一个节点就是根节点,可以根据这个根节点和中序遍历的定义(先遍历左子树,再遍历根节点,最后遍历右子数)将中序遍历分成左子树的中序遍历和右子树的中序遍历,递归构造二叉树。注意:二叉树的三种遍历中:前序遍历、中序遍历、后序遍历并不能都可以已知两种遍历求第三种遍历,必须已知中序遍历,即前序遍历原创 2013-05-22 10:17:01 · 800 阅读 · 0 评论 -
博客搬家了
新博客地址:http://wangpengfly.github.io/原创 2013-07-01 08:28:31 · 479 阅读 · 0 评论