笔试面试算法
tianguiyuyu
这个作者很懒,什么都没留下…
展开
-
大数据笔试面试题
问题: 有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数,但是内存限制只有2G.解题思路:先将这个20亿个整数进行哈希分流,比如说分别分流到16个小文件中,然后用哈希表分别计算出每一个小文件中出现次数最多的数,最后将这16个数再次进行比较,就可以得出这20亿个整数中出现次数最多的数。如下图所示:...转载 2019-07-28 11:35:42 · 1133 阅读 · 0 评论 -
MYSQL8.0以上版本正确修改ROOT密码
参考链接1:https://blog.csdn.net/yi247630676/article/details/80352655参考链接2:https://blog.csdn.net/ad996454914/article/details/80904771原创 2019-04-24 19:04:25 · 407 阅读 · 0 评论 -
删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/* public class ListNode { int val; ListNode next = null; Lis...原创 2019-04-19 18:26:36 · 66 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。剑指offer中的题:public class Solution { private boolean verify(int[] sequence, int first, int last) { if(...原创 2019-04-24 15:11:54 · 123 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。第一种思路:也是从左到右来进行遍历,只不过是在该反转的时候用collections工具类进行反转,代码如下: public ArrayList<ArrayList<Integer>> Print(...原创 2019-04-24 12:06:38 · 79 阅读 · 0 评论 -
从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7package cn.cqu.edu;import java.util.ArrayList;import java.util.Queue;import java.util.concurrent.LinkedBlockingQueue;...原创 2019-04-24 10:51:38 · 117 阅读 · 0 评论 -
在 O(1) 时间内删除链表节点
解题思路① 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。② 如果链表只有一个节点,那么直接② 否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。综上,如果进行 N 次操作,那么大约需要操作节点的次数为 N-1+N=2N-1,其中 N-1...原创 2019-04-19 15:18:35 · 82 阅读 · 0 评论 -
打印从 1 到最大的 n 位数
题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。解题思路由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 char 数组进行存储。使用回溯法得到所有的数。public void print1ToMaxOfNDigits(int n) { if (n <...原创 2019-04-19 15:10:41 · 106 阅读 · 0 评论 -
数值的整数次幂
题目描述给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。解题思路下面的讨论中 x 代表 base,n 代表 exponent。因为 (x*x)n/2可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。public double P...原创 2019-04-19 14:50:21 · 547 阅读 · 0 评论 -
把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323。代码如下:import java.util.ArrayList;import java.util.Collections;import java.util.Comparator...原创 2019-05-03 17:29:47 · 79 阅读 · 0 评论 -
最小的 K 个数
解题思路快速选择复杂度:O(N) + O(1) 只有当允许修改数组元素时才可以使用快速排序的 partition() 方法,会返回一个整数 j 使得 a[l..j-1] 小于等于 a[j],且 a[j+1..h] 大于等于 a[j],此时 a[j] 就是数组的第 j 大元素。可以利用这个特性找出数组的第 K 个元素,这种找第 K 个元素的算法称为快速选择算法。public ...转载 2019-05-03 10:55:00 · 106 阅读 · 0 评论 -
使用头插法
利用链表头插法为逆序的特点。头结点和第一个节点的区别:头结点是在头插法中使用的一个额外节点,这个节点不存储值; 第一个节点就是链表的第一个真正存储值的节点。public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { // 头插法构建逆序链表 ListNode ...原创 2019-04-18 19:03:32 · 2554 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。基本思路:采用中序遍历的思维,然后设置两个节点,一个head, 一个pre。这两个节点很精髓,细细体会。package cn.cqu.edu;/* * * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,...原创 2019-04-30 15:40:56 · 93 阅读 · 0 评论 -
礼物的最大价值
题目描述在一个 m*n 的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(大于 0)。从左上角开始拿礼物,每次向右或向下移动一格,直到右下角结束。给定一个棋盘,求拿到礼物的最大价值。例如,对于如下棋盘1 10 3 812 2 9 65 7 4 113 7 16 5礼物的最大价值为 1+12+5+7+7+16...原创 2019-05-08 19:38:03 · 275 阅读 · 0 评论 -
有一个数组,只有两个不重复的数字,请把他们找出来
算法流程描述如下:转载 2019-07-28 08:04:53 · 1607 阅读 · 0 评论 -
最长公共子序列
找出两个字符串的最长公共子序列。原创 2019-08-01 15:10:56 · 118 阅读 · 0 评论 -
左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!用到了取模运算,看程序如下:public class Solution { ...原创 2019-05-13 16:32:50 · 72 阅读 · 0 评论 -
翻转单词顺序
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?用到了Coll...原创 2019-05-13 16:05:20 · 166 阅读 · 0 评论 -
和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...原创 2019-05-13 15:12:30 · 83 阅读 · 0 评论 -
二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) ...原创 2019-05-10 21:23:49 · 150 阅读 · 0 评论 -
二叉搜索树的第k个节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。原理是中序遍历,代码如下:/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; publ...原创 2019-05-10 21:12:17 · 122 阅读 · 0 评论 -
数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007程序代码如下,其本质就是归并排序的基础上做一些修改。public class Solution { public int cnt=0; public in...原创 2019-05-10 16:35:09 · 109 阅读 · 0 评论 -
求1+2+3+4+5+..+n
题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。其主要思想是递归,这个程序很美。package cn.cqu.edu;public class Sum_Solution1 { public int Sum_Solution(int n) { int s...转载 2019-05-14 19:23:50 · 1356 阅读 · 0 评论 -
扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2019-05-14 16:20:44 · 106 阅读 · 0 评论 -
最长不含重复字符的子字符串
最长不含重复字符的子字符串题目描述输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。package cn.cqu.edu;import java.util.HashMap;import java.util.Map;public class MostLongS...原创 2019-05-09 15:42:07 · 407 阅读 · 0 评论 -
二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中 1 的个数。n&(n-1)该位运算去除 n 的位级表示中最低的那一位。public int NumberOf1(int n) { int cnt = 0; while (n != 0) { cnt++; n &= (n - 1); } return cnt;...原创 2019-04-18 17:39:04 · 111 阅读 · 0 评论 -
剪绳子
题目描述把一根绳子剪成多段,并且使得每段的长度乘积最大。n = 2return 1 (2 = 1 + 1)n = 10return 36 (10 = 3 + 3 + 4)class Solution { public int integerBreak(int n) { int[] result=new int[n+1]; if...原创 2019-04-18 16:18:08 · 95 阅读 · 0 评论 -
对称二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...原创 2019-04-23 15:18:10 · 88 阅读 · 0 评论 -
负数的二进制
负数的二进制转换,其实,容易,容易理解。https://jingyan.baidu.com/article/29697b9106eb52ab21de3c7a.html方法/步骤 首先,来个-5, 实践出真知嘛。 把5转化为二进制字节形式。 得到101, 然后补零。 这个时候,原码就出来了。 然后,取反(0的变成1,1的变成0。) ...转载 2019-04-03 16:04:01 · 4468 阅读 · 3 评论 -
钢条切割问题
对应于算法导论上的钢条切割问题。package Dynamic_Programming;/* * 动态优化问题之钢条切割问题 * 长度i: 1 2 3 4 5 6 7 8 9 10 * 价格p: 1 5 8 9 10 17 17 20 24 30 * * 问题,对于长度为i的钢条,怎么切割,使之价值最大。 * */publi...原创 2019-04-03 15:56:01 · 168 阅读 · 0 评论 -
矩形覆盖问题
关于分治法 分治法,分而治之。就是将原问题划分为n个规模较小,结构与原问题类似的小问题进行处理,递归地解决这些问题,然后再合并求解的过程。 分治法在解决的流程上分为三个步骤: 1.分解:将原问题划分为n个规模较小,结构与原问题类似的小问题。 2.解决:若子问题规模小,足以处理,则求解,否则继续递归处理。 3.合并:将子问题的解,合并成为原问题的解。面试题:矩形覆盖...原创 2019-04-15 21:34:08 · 2463 阅读 · 0 评论 -
用两个栈来实现一个队列
用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。基本思路就是,一个栈用于push操作,另外一个栈用于pop操作。package cn.cqu.edu;import java.util.Stack;public class Solution { Stack<Integer> stack1=new Stack<Integer>();...原创 2019-04-15 20:11:43 · 96 阅读 · 0 评论 -
大数乘法
在编程语言中实现,大数乘法,不像我们人为的计算。我们认为的计算乘法,在计算每一步的时候,都考虑进位。而在编程语言中,我们把进位的情况都放在后面处理,方便很多。总之,处理大数的问题,第一步就要考虑是用string来存放输入数据,代码如下: public class M9_BigMul { // 大数乘法 static String mul(S...原创 2019-04-03 11:47:39 · 221 阅读 · 0 评论 -
大数加法
对于两个大数来说,int,float,double,long等类型存储不下,因此在java中,就用string类型来存储,然后将其转化为char数组,然后逐一进行相加。 在计算机中数字表示的范围是有限制的,比如我们熟知的 int、float、double 等数据类型所能表示的范围都是有限的,如果我们要对位数达到几十位、几百位、上千位的大整数进行计算,这些数据类型显然...原创 2019-04-03 11:40:31 · 101 阅读 · 0 评论 -
利用碾转相除法求k个数的最大公约数和最小公倍数
2个数的最大公约数求法: 利用碾转相处法,其原理为gcd(a,b)=gcd(b,r), 其中r=a%b ,注意,这里a>b, 如果a%b==0, 则最大公约数为b.2个数的最小公倍数求法:其求解过程用到了最大公约数的求解过程,其求解公式为: int result=(a*b)/(gcd(a,b)).k个数的最大公约数求法:先利用碾转相除法求出两个数的最大公约数,其结果再与...原创 2019-04-03 11:32:36 · 1023 阅读 · 0 评论 -
中序遍历查找下一个节点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:就是只考虑当前节点的右边,父亲部分。public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; ...原创 2019-04-15 19:53:13 · 394 阅读 · 0 评论 -
重建二叉树
题目描述根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。preorder = [3,9,20,15,7]inorder = [9,3,15,20,7]解题思路前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分为树的左子树中序遍历结果,右部分为树的右子树中序遍历的结果。算法代码...原创 2019-04-11 22:28:15 · 55 阅读 · 0 评论 -
从尾到头打印链表
题目描述从尾到头反过来打印出每个结点的值。使用一个栈来实现import java.util.ArrayList;import java.util.Stack;class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = va...原创 2019-04-11 20:47:22 · 168 阅读 · 0 评论 -
数组中重复的数字
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。Input:{2, 3, 1, 0, 2, 5}Output:2解题思路要求是时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。对于这种数组元素在 [0...原创 2019-04-11 16:52:44 · 75 阅读 · 0 评论 -
判断一个字符串是不是数字
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:使用正则表达式来实现。package test;public class Numeric { publ...原创 2019-04-20 20:11:50 · 2214 阅读 · 0 评论