随笔分类 - 算法与数据结构
摘要:输入一组正整数,以0结束,输出这组正整数可以组成的最大整数 示例: 输入:22 20 11 3 0 输出:3222011 思路: 1. 将输入的N的整数存储起来 2. 对存储的字符串烦字典排序 3. 将排序好的字符串连接起来 bool compare(string p1,string p2){ if
阅读全文
摘要:void RandNumbs(int nLimts, int result[], int n)//给定范围内产生n个不同随机数(1 nLimts),并存储到result中 { int nNum = 0; int temp = new int[nLimts]; for (int i = 0; i
阅读全文
摘要:问题描述:找出链表中倒数第K个节点思路分析:用两个指针,一前一后,保持k个距离,前面的指针移动到末尾,后面的指针就刚好直到第k个节点,要考虑到k为0,倒数第k个节点不存在的情况。参考代码:ListNode* FindKthToTail(ListNode * pHead,unsigned int k)...
阅读全文
摘要:问题描述: 输入一个整数数组,实现一个函数来调整该数组中的数字顺序, 是的所有奇数位于数组的前半部分,所有偶数位于后半部分。 思路分析: 使用两个指针,一个指向数组头,一个指向数组尾,相向运动,一个在前面找偶数, 一个在后面找奇数,找到后互换,两个指针相遇则结束。 参考代码: void RecordOddEven(int *pData,int nLength){ if ((pData...
阅读全文
摘要:问题描述:给定单相链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 这个比较简单,做不做解释,直接看参考代码,不过有一点就是要注意,还是要看删除的节点类型,不能保证总是O(1)时间 参考代码: void DeleteNode(ListNode** pHead,ListNode *pTobeDelete){ if ((pHead == NULL) || (*pHead =...
阅读全文
摘要:问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3打印出1-999. 思路分析: 最简单的想法莫过于先算出这个最大的数,然后循环打出,但是没有考虑大溢出和大数问题。 下面有两种思路,一个是用数组模拟字符串,一种是用排列组合的方法。 参考代码: 思路一:字符串上模拟数字加法 bool Increment(char *number)//实现在数字字符串上+1{ bo...
阅读全文
摘要:问题描述:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需考虑大数问题。思路分析:要是你秒秒钟想到一个循环搞定估计面试没戏了。要考虑指数为0和负数的情况,如果底数也为0了?为负数时就是相当于要求正数时的倒...
阅读全文
摘要:问题描述: 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。 思路分析: 简单的立马想到将次数右移,只要与1相与的话就能算出个数了,但是位移负数时左边为了保持符号位会 补一,例如将1101右移以为会变成1110.这样就会造成死循环。 下面有两种可行的方法: 1、我们可以不右移输入的数组n,首先把n和1做与运算,判断最低位是不是1,接着把1左移一位得到2再和 n做与运算,...
阅读全文
摘要:问题描述: 把一个数组最开始的若干元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的旋转 输出旋转数组的最小元素。例如{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为一。 思路解析: 最简单的莫过于从头到尾遍历一遍找出最小元素,这种方法时间复杂度为O(n),但是没有使用旋转数组的 特性,肯定不符合面试官的要求。在排序数组中我们利用二分查找发实现O(lo...
阅读全文
摘要:问题描述: 公司总共有几万名员工,对这些员工的年龄排序。要求只需用少量的辅助内存。 思路解析: 年龄总数在一个很小范围,例如0-100.这就可以用一个小数组存储了。逐个统计 年龄即可 参考代码: void SortAge(int age[],int length){ if (age == NULL || length == 0) { return; } ...
阅读全文
摘要:对于这一类排序,我觉得先要弄懂其排序思想,可以通过看一些书籍或者文章(算法导论不错),在此基础上 要自己能够总结写出算法的伪代码,即使环境和条件改变,特别是一时不好下手写代码时很有必要先写下算法 伪代码,然后具体实现,时而看看写写,此类算法就能信手拈来。 快速排序是基于分治模式的。下面是算法导论中对
阅读全文
摘要:问题描述: 用两个栈实现队列,队列的声明如下,请实现他的两个函数AppendTail和DeleteHead,分别完成在队列 尾部插入节点和在队列头部删除节点的功能。 templateclass CQuene{public: CQuene(){}; ~CQuene(){}; void AppendTail(const T &Node); T DeleteHead();pri...
阅读全文
摘要:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;}; //递归实现二叉树的遍历。递归算法比较简洁易懂这一就不做解释 void Preorder(BinaryTreeNode
阅读全文
摘要:问题描述: 输入二叉树的前序遍历和后序遍历结果,请重建二叉树。假设输入的前序序列和后序序列都不含重复数字。 思路分析: 在二叉树的前序遍历中第一个数字总是树的根节点的值。但是在中序遍历中根节点的值位于序列中间,左子 树节点的值位于根节点值得左边,右子树节点的值位于根节点值的右边。因此我们需要扫描中序序列擦能找 到根节点的值。通过此方法可以分别找到了左右子树的前序序列和中序序列,然后可以用递归的...
阅读全文
摘要:问题描述: 在一个二维数组中,每一行都按照从左到右递增排序,每一列从上到下递增排序。请完成一个函数, 输入这样一个二维数组和一个整数,判断数组中时候含有该整数。 思路分析: 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查 找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,提出这个数字所在的行。也就是说 如果要查找的数字不在数组的右上角,则每...
阅读全文
摘要:问题描述: 请实现一个函数,把字符串中的每个空格替换为“%20”。例如输入“Hello ZCM”,则输出“Hello%20ZCM”。 思路分析:在网络编程中,如果URL参数中有特殊字符,如空格、’#’等,可能导致服务端无法获得正确的参数值。 我们需要将这些特殊符号转换成服务器可以是别的字符。转换规则是在’%‘后面跟上ASII码的两位十六进制表示。 此题只需转换空格。为了提高效率,我们可以县便利...
阅读全文

浙公网安备 33010602011771号