Interview Learning
WA说
喜欢折腾,对微服务实践有自己深入的了解。
涉猎语言Java,Python
涉猎框架Spring Cloud/Dubbo/Spring Framework
展开
-
去除数组维数n,元素为1--n的任意整数的重复整数
思路:可以使用位图的思想来解决该问题,以空间换取时间#include #include #include #include #include using namespace std;int extra_nonrepeat(vector &v){ vector::iterator it=v.begin(); int *arr = new int[v.size()]; mems原创 2013-07-08 21:58:36 · 946 阅读 · 0 评论 -
卡塔兰数的应用
卡塔兰数卡塔兰数的一般項公式為 前幾項為 (OEIS中的数列A000108): 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 2446原创 2013-08-19 23:20:08 · 2047 阅读 · 0 评论 -
求二元查找树树的镜像(剑指offer笔记)
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入: 8 / \ 6 10 / \ /\5 7 9 11输出: 8 / \ 10 6 / \ / \11 9 7 5思想:1先交换根节点的左右子树 2交原创 2013-07-26 23:09:04 · 1325 阅读 · 0 评论 -
哈希表以及哈希的应用
该博文主要介绍几种利用哈希思想的简单的面试题1 第一个只出现一次的字符在字符串中找出第一个指出先一次的字符,如输入"adsaaddsef",则输出'e'思想:引入一个256个元素的字符数组,用来存储输入字符串的字符的次数,然后遍历该数组,直到数组元素为1时停止遍历,并输出该元素代码:char findFirstAppeared(char *str){ if(str==NU原创 2013-08-01 23:50:36 · 1519 阅读 · 0 评论 -
实现用后缀数组求字符串的最长重复字串
原理在博文后缀数组的应用已经说明,下面是实现代码/*问题描述给定一个字符串,求出其最长重复子串例如:abcdabcd最长重复子串是 abcd,最长重复子串可以重叠例如:abcdabcda,这时最长重复子串是 abcda,中间的 a 是被重叠的。*/#include #include #include #include using namespace std;int原创 2013-07-22 21:09:51 · 1168 阅读 · 0 评论 -
后缀数组的应用
问题描述给定一个字符串,求出其最长重复子串例如:abcdabcd最长重复子串是 abcd,最长重复子串可以重叠例如:abcdabcda,这时最长重复子串是 abcda,中间的 a 是被重叠的。直观的解法是,首先检测长度为 n - 1 的字符串情况,如果不存在重复则检测 n - 2, 一直递减下去,直到 1 。这种方法的时间复杂度是 O(N * N * N),其中包括三部转载 2013-06-27 08:35:51 · 908 阅读 · 0 评论 -
堆排序实现以及相关笔试题
本博文内容为堆排序的实现,以及堆排序的相关笔试题,如求数组的topk元素,优先队列实现等1.堆排序的实现原理:堆排序是基于二叉树实现的,主要步骤为:先建立二叉堆(堆元素从 n/2 - - 1 执行向上调整操作) (二叉堆分为小根堆与大根堆),再不断执行以下步骤:将根元素与根底元素互换,且将未排序的堆总元素减一,并执行将根顶元素向下调整操作,直到未排序堆总元素为0具体代码如下:原创 2013-07-21 19:24:04 · 1901 阅读 · 0 评论 -
快速排序实现以及相关笔试题
1 快速排序的实现思想:指定划分元素,如key=data[l],然后i先由左至右遍历数组并同时判断与key的大小,比key大则停止遍历,再j从右向左开始遍历数组并同时判断与key的大小,比key小则停止,两趟比较后,比较i与j的大小,i>j则不交换两数,否则交换data[i]与data[j]。当i>j时交换data[j]与data[l],最后返回key的位置j。这是一次划分,再分别从l -- j-1 和 j+1 -- h重复上面的划分过程.具体代码如下:void exch(int &a, int &b原创 2013-07-21 16:26:30 · 1967 阅读 · 0 评论 -
合并单链表,输出单链表中间元素,判断是否有环等
本博文内容为单链表相关的笔试题,转载请注明转载处,否则必究1. 合并两个有序的单链表成一个有序的单链表方法分为递归实现与非递归实现,两种方法都不额外开辟 内存空间链表的数据结构在本博客的单链表逆转,约瑟夫环等 递归实现://递归实现合并两个有序单链表LinkNode* merge_list(LinkNode *pHead1, LinkNode *pHead2){ if(pHead1==NULL) return pHead2; if(pHead2==NULL) return pHe原创 2013-07-21 15:48:46 · 1085 阅读 · 0 评论 -
单链表逆转,约瑟夫环等
单链表逆转输出单链表的倒数k个节点值约瑟夫环1. 单链表实现,以及相关基本操作struct LinkNode{ int value; LinkNode *next;};void AddToTail(LinkNode **pHead, int value) //尾插法插入节点{ LinkNode原创 2013-07-14 12:26:07 · 1650 阅读 · 0 评论 -
自己实现pow(double base, unsigned exponent)
题目来自剑指Offer,描述:实现函数double pow(double base, unsigned exponent)这里有几个注意点:1. exponent有可能为正为负2. 当base 为0,exponent为负数时,此时结果数学上并没有定义3. 数学公式的使用: a^(n/2)*a^(n/2) n为偶数a^n = a^((n-原创 2013-07-19 21:38:24 · 1424 阅读 · 0 评论 -
在一个二维数组中判断给定整数是否存在,要求在O(n)内实现
题目描述:在一个二维数组中,每一行元素从左到右递增,从上到下递增,现输入一个整数,判断数组中是否存在该整数,要求时间复杂度为O(n)思路:可以数组分为三个部分,数组右上角,左边,下面例如:数组如下1 2 8 92 4 9 124 7 10 136 8 11 15查找元需为7,数组右上角元素为9因为71 2 82 4 94原创 2013-07-13 23:28:49 · 2048 阅读 · 1 评论 -
用STL实现字符串字串替换
题目描述:给定一个字符串str,将字符串中的字串sub_str替换成rep_str方法:使用string的成员函数replace与string的成员函数find实现该算法,时间复杂度为O(n);具体实现代码为:#include #include #include using namespace std;const char *rep_str(const char原创 2013-07-13 23:43:29 · 1696 阅读 · 0 评论 -
海量数据处理之求1亿个整数中的最大的k个数
题目描述:输入:一亿个整数,有重复的数字,整数保存在一个文件中输出:文件中最大的k个数限制:尽量以最快的速度完成任务。具体解决方法:1. 位图解决位图为用比特位来存储数据,如果i比特位为1,则该位在表示整数i,为0,则不是用该方法主要提供三个函数接口:设置比特位:set_bit(int *data, int num) 清除比特位:clear_bit(int *d原创 2013-07-09 23:34:15 · 1369 阅读 · 0 评论 -
两个整数集合A和B,求其交集
两个整数集合A和B,求其交集。 1. 读取整数集合A中的整数,将读到的整数插入到map中,并将对应的值设为1。 2. 读取整数集合B中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2 通过更改map中的值,避免了将同样的值输出两次。下面为源码:#include #include using namespace std;原创 2013-08-28 22:15:00 · 9609 阅读 · 0 评论