刷题与面经
lilivian
目前在学校从事数据挖掘理论学习与研究
展开
-
金网安泰JAVA开发工程师面经
时间:2016.8.5本来我一直是投数据挖掘算法岗的,但是有些公司不招这方面的,我就打算去尝试尝试开发岗位。(由于本人编程能力太差,没有底气去面大公司的JAVA开发)下午做了两个多小时的地铁才从学校跑到软件园。。。累死。。。困死。。。去了一进门,表明来意,前台女的就说面试的怎么来这么迟。。。问我带简历没,我说没。那先填个简历。。拿过表来去会议室填了。。一会又一个妹子,说你填好了来找我,安排机试。。。原创 2016-08-06 09:42:14 · 1833 阅读 · 0 评论 -
剑指Offer:面试题19——二叉树的镜像(java实现)
问题描述: 操作给定的二叉树,将其变换为源二叉树的镜像。 二叉树结点定义为:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}例如:原创 2016-07-07 08:54:37 · 973 阅读 · 0 评论 -
剑指Offer:面试题18——树的子结构(java实现)
问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}思路1:原创 2016-07-06 17:04:36 · 1038 阅读 · 0 评论 -
剑指Offer:面试题17——合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val <= p2.val,则p3把p1指向的结点加入h3,p1后移动。反之,对p2进行对应操作。代码:(未验证正确性,提交时显示超时,所以不知道功能是否实现,还是仅仅时间复杂度高?)public原创 2016-07-06 16:45:06 · 644 阅读 · 0 评论 -
剑指Offer:面试题16——反转链表(java实现)
问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。链表结点如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}思路:原创 2016-07-06 15:52:51 · 4643 阅读 · 2 评论 -
剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点。(尾结点是倒数第一个)结点定义如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}思路1: 先遍历链表,计算其长度length; 然后计算出倒数第原创 2016-07-06 15:50:35 · 553 阅读 · 0 评论 -
剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这个数,然后把它后面的数字都往前面移动一位,这样最后空出一位放该偶数即可。但显然这样会重复移动很多次。时间复杂的O(n^2) 2.在前后安排两个哨兵i,j,前面的用来指示偶数(即扫描如果是奇原创 2016-07-06 15:29:57 · 3406 阅读 · 2 评论 -
链表:删除链表中重复的结点(java实现)
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5代码如下:未进行优化 public class ListNode { int val; ListNode next = null; ListNode(int val) { t原创 2016-07-06 12:08:28 · 1128 阅读 · 0 评论 -
剑指Offer:面试题13——在O(1)时间删除链表结点
问题描述: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:public class ListNode{ int value; ListNode next; public ListNode(int v){value = v;}}思路:常规的做法就是遍历链表找到被删除结点的前趋p,然后改变p->next的指向即可。但是原创 2016-07-06 11:27:41 · 701 阅读 · 0 评论 -
剑指Offer:面试题12——打印1到最大的n位数(java实现)
问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999.思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可。public static void Print1ToMaxOfNDigits_1(int n){ int number = 1; int i = 0; while(i++ < n){原创 2016-07-06 11:07:28 · 6249 阅读 · 0 评论 -
剑指Offer:面试题11——数值的整数次方(java实现)
题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题思路:本题的重点考察内容是代码的完整性,要综合考虑输入的合法性,边界值等等,同时也可以进行优化实现一:public double Power(double base, int exponent){ double res原创 2016-07-06 10:15:27 · 508 阅读 · 0 评论 -
剑指Offer:面试题8——旋转数组的最小值(java实现)
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入 一个递增排序的数组的一个旋转输出 旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路: 1.直接遍历一次数组,即可得出最小值。时间复杂度O(n) 2.由于原数组是原创 2016-07-06 09:52:56 · 943 阅读 · 0 评论 -
剑指Offer:面试题7——用两个栈实现队列(java实现)
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。首先定义两个栈Stack<Integer> stack1 = new Stack<Integer>();//作为进队的端口Stack<Integer> stack2 = new Stack<Integer>();//作为出对的端口思路:两个栈,有两个端口,那么肯定一个是用来入队的,另一个用来出队的。同时,原创 2016-07-05 13:31:59 · 3028 阅读 · 0 评论 -
剑指Offer:面试题6——重建二叉树(java实现)
问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不包含重复的数字。例如:输入:前序{1,2,4,7,3,5,6,8},中序{4,7,2,1,5,3,8}输出:相应的树根结点思路1:递归。前序遍历:根(左子树)(右子树) 中序遍历:(左子树)根(右子树)先从前序遍历剥出 根结点 然后从中序遍历中剥出:左子树和右子树,递归建立子树,并与根结原创 2016-07-05 12:40:37 · 580 阅读 · 0 评论 -
剑指Offer:面试题5——从尾到头打印链表(java实现)
问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值。首先定义链表结点public class ListNode { int val; ListNode next = null; ListNode(int val){ this.val = val; } }思路1:此题明显想到是利用栈的思想,原创 2016-07-05 12:07:55 · 724 阅读 · 0 评论 -
剑指Offer:面试题4——替换空格(java实现)
问题描述:请实现一个函数,把字符串中的每个空格替换成”%20“。例如: 输入:“We are happy.” 输出:”We%20are%20happy.”思路:按顺序找出空格所在的位置(下标),然后利用字串相加,将去除空格的字串用“%20”连接起来/** * 面试题4:替换空格 * @param str * @return */ public st原创 2016-07-05 10:47:23 · 583 阅读 · 0 评论 -
剑指Offer:面试题3——二维数组中的查找(java实现)
问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.思路:取数组中的元素与目标整数比较,相等则返回true,小于则 查找当前元素的右方和下方,大于则查找当前元素的左方和上方,然而这两个区域有重叠部分,就不容易处理。然而如果我们从数组的角落选取元素与目标整数对比,则就不会出现重叠原创 2016-07-05 10:24:07 · 945 阅读 · 0 评论 -
leetcode 349:两个数组的交集I
Problem:Given two arrays, write a function to compute their intersection.中文:已知两个数组,写一个函数来计算它们的交集Example:Given nums1 = [1, 2, 2, 1], nums2 = [2, 2],return [2, 2].已知nums1 = [1, 2, 2, 1], nums2 = [2, 2]原创 2016-05-26 17:41:57 · 2719 阅读 · 0 评论 -
剑指Offer:面试题20——顺时针打印矩阵(java实现)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路1(自己想的): 每次打印一行矩阵,然后将剩余的部分原创 2016-07-07 10:06:00 · 3787 阅读 · 0 评论 -
剑指Offer:面试题21——包含min函数的栈(java实现)
问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1).思路:加入一个辅助栈用来存储最小值集合(这里要注意题目并没有说栈内的元素类型,因此要尽量通用)import java.util.Stack;public class Solution { Stack s1=new Stack();原创 2016-07-07 10:58:28 · 1056 阅读 · 0 评论 -
剑指Offer:面试题22——栈的压入,弹出序列(java实现)
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 思路: 遍历待测试序列,如果当前元素在栈顶,出栈即可,否则,查看是否所有待入栈元素已入栈,如是说明当前元素在栈里面原创 2016-07-07 11:46:12 · 2251 阅读 · 0 评论 -
百度数据挖掘实习生一面电话面
时间:2016.8.4岗位:数据挖掘实习生 部门:系统部简介:面试主要围绕项目,数据挖掘算法,java的一些特性,以及周边python, linux等的了解程度。整个过程面试官非常nice,气氛很融洽。一:自我介绍 二:针对项目,问一些细节,主要包括,这个项目主要是干什么的,你在里面负责了什么,要能把具体过程说清楚。然后里面涉及的具体技术点要懂得原理。 三:数据挖掘算法,其实这块主要和项目结合原创 2016-08-06 09:22:19 · 1621 阅读 · 0 评论 -
牛客网程序员面试金典:1.2——原串翻转(java实现)
问题描述: 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。 测试样例: “This is nowcoder” 返回:”redocwon si sihT”思路1: 直接首尾交换即可public Str原创 2016-07-09 13:25:10 · 973 阅读 · 0 评论 -
牛客网程序员面试金典:1.1确定字符互异(java实现)
问题描述: 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。 测试样例: “aeiou”返回:True “BarackObama”返回:False思原创 2016-07-09 11:11:40 · 977 阅读 · 0 评论 -
剑指Offer:面试题34——丑数(java实现)
问题描述: 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路1:(显然是比较耗时的) 直接去判断每个整数是不是丑数,然后找到第N个小的数。(牛客网提交超时)public int GetUglyNumber_Solution(int index) {原创 2016-07-09 10:13:06 · 1000 阅读 · 0 评论 -
剑指Offer:面试题33——把数组排成最小的数(java实现)(未完待续)
问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路1: 最直接的做法就是先求出这个数组中的所有数字的全排列,然后把每个排列拼起来,最后求出i拼起来的数字的最小值。思路2: 1.找到一种排序规则,数组根据这个排序规则能拍成一个最小的数字比如m与n原创 2016-07-09 09:22:06 · 122 阅读 · 0 评论 -
剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)
问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次。思路:(不考虑时间效率的解法,肯定不是面试官期望的) 直观想法:累加1到n中每个整数中1出现的次数。 每个整数中1出现的次数可以由除以10和模10来计算得到。代码如下:boolean invalidInput = fals原创 2016-07-08 17:10:40 · 468 阅读 · 0 评论 -
剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)
问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次。思路:(不考虑时间效率的解法,肯定不是面试官期望的) 直观想法:累加1到n中每个整数中1出现的次数。 每个整数中1出现的次数可以由除以10和模10来计算得到。代码如下:boolean invalidInput = fals原创 2016-07-08 17:10:20 · 2337 阅读 · 0 评论 -
剑指Offer:面试题31——连续子数组的最大和(java实现)
问题描述 : 输入一个整数数组,数组里面有正数也有负数。数组中一个或连续几个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)思路1:常规解法,不知道怎么描述了。。代码:boolean invalidInput = false; public int FindGreatestSumOfSubArray(int[] array) { if(array =原创 2016-07-08 16:32:05 · 670 阅读 · 0 评论 -
剑指Offer:面试题30——最小的k个数(java实现)
问题描述: 输入n个整数,找出其中最小的k个数思路1: 先排序,再取前k个 时间复杂度O(nlogn)下面给出快排序的代码(基于下面Partition函数的方法)public void QuickSort(int[] arr, int start, int end){ if(start == end){ return; } int index原创 2016-07-08 16:05:00 · 1661 阅读 · 0 评论 -
剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
PS:在前几天的面试中,被问到了这个题。然而当时只能用最低效的方法来解。问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路1: 低效的做法:直接用哈稀表来存储<key, value>,并找出出现次数value大于等原创 2016-07-08 11:34:50 · 2185 阅读 · 4 评论 -
剑指Offer:解决难题时的三大方法
1.画图 让抽象的东西变得直观生动起来。比如设计二叉树,链表,栈,队列这些数据结构时。2.举例子 同样可以化抽象为直观。能够更清晰的展现思路。从例子归纳出一般做法。3.分解 有时问题本身是比较复杂的,但是它可以分解成几个简单的部分。思路通常是使用分治法,动态规划等方法。原创 2016-07-08 10:02:52 · 851 阅读 · 0 评论 -
剑指Offer:面试题28——字符串的排列(java实现)(待序)
问题描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 思路: 全排列,固定第一位,剩余的部分继续全排列。代码:原创 2016-07-07 21:40:59 · 451 阅读 · 0 评论 -
剑指Offer:面试题27——二叉搜索树与双向链表(java实现)
问题描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路: 将树分为三部分:左子树,根结点,右子树。 1.我们要把根结点与左子树的最大结点连接起来 2.要把根结点与右子树的最小结点连接起来。代码:(本来按照书上的写的代码,可是得到的结果不对)(下面的代码是他人的代码)/**public class T原创 2016-07-07 20:11:00 · 974 阅读 · 0 评论 -
剑指Offer:面试题26——复制复杂的链表(java实现)
问题描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。思路1: 1.先复制链表节点,并用next链接起来。 2.然后对每一个结点去修改它的随机指针S。遍历链表找到S。 时间复杂度O(n^2)思路2: 1.先复制链表节点N-N’,并用next链接起来,并用一个哈系表存储《N, N‘》结点对, 2.然后对每原创 2016-07-07 17:44:19 · 1119 阅读 · 0 评论 -
剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
问题描述: 输入一棵二叉树和一个整数,打印出二叉树中结点指的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int原创 2016-07-07 17:10:03 · 705 阅读 · 0 评论 -
剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)
问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。思路: 1.首先后序遍历的结果是[(左子树的后序)(右子树的后序)根结点],那么我们首先找到了根结点的值, 2.其次,我们知道二叉搜索树的性质是:任何结点的左子树的值小于根结点的值,小于右子树的值。 3.因此,从后向前遍历原创 2016-07-07 15:49:47 · 498 阅读 · 0 评论 -
剑指Offer:面试题23——从上往下打印二叉树(java实现)
问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路: 按照层次遍历的方法,使用队列辅助。 1.将根结点加入队列。 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若有右子树,将其加入队列。 3.直到队列为空,表明已经打印完所有结点。代码:import java.util.ArrayList;import java.util.Queue原创 2016-07-07 15:03:17 · 2338 阅读 · 0 评论 -
LeetCode:237
题目:Delete Node in a Linked List(从列表中删除指定结点) 描述:Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. 例子:Supposed the linked list is 1 -> 2 -> 3原创 2015-07-16 14:58:36 · 624 阅读 · 0 评论