
常见问题的解决代码
中都
风习袅袅,盈水展千华,飞檐亭角清铃响;犹记当初,你回眸莞尔,一笑倾城百日香。!
展开
-
动态规划浅析
目录动态规划思想:1、最长的递增子序列问题:2、最长公共子序列问题:3、0-1背包问题:动态规划思想:可以先了解一下国王的游戏加深对动态规划的理解;如果一个问题是求一个问题的最优解(通常是求最大值或者最小值),而且该问题能够分解成若干个子问题,并且问题之间还有重叠的更小的子问题,就可以考虑用动态规划来解决这个问题;我们在应用动态规划之前要分析能否把大问题分解成小问题,分解后的每个小问题也存...原创 2018-12-06 18:31:18 · 398 阅读 · 0 评论 -
数组中的逆序对
题目:在数组中的两个数字如果前面的数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如在数组{7, 5, 6, 4}中,一共存在5个逆序对,分别是(7,6)、(7,5)、(7,4)、(6、4)和(5,4)。解决方法:用递归排序思想:import java.util.Arrays;/** * @ClassName TestDemo51...原创 2019-01-24 11:25:28 · 308 阅读 · 0 评论 -
第一个只出现一次的字符
题目一:字符串中只出现一次的字符,在字符串中找到第一个只出现一次的字符,如输入"abaccdeff",则输出“b”; /** * 面50 * @param str * @return */ public static char find(String str) { if(str == null || str.length() ...原创 2019-01-23 16:25:14 · 257 阅读 · 0 评论 -
把数组排成最小的数
题目:输入一个正整数数组,把数组里面的数字拼接起来排成一个数,打印能拼接出的所以数字的最小的一个,例如,输入数组{3,32,321},则打印出这三个数字能拼成的最小数字321323;/** * @ClassName TestDemo45 * @Description 面45 * @Author lzq * @Date 2019/1/22 10:14 * @Version 1.0 *...原创 2019-01-22 11:02:18 · 263 阅读 · 0 评论 -
数据流中的中位数
题目:如何找到一个数据流中的中位数?如果从数据流中读取到奇数个数值,那么中位数就是所有数值排序之后位于中间的数值,如果从数据流中读取到偶数个数值,那么中位数就是排序之后位于中间两个数的平均值;最好的时间复杂度解决思路:使数据在容器中已经排序,并且让容器左边的数据比右边的小,这样中位数就是左边的最后一位数或者是左边的最后一位数和右边的第一位数的平均值,要实现让容器左边的数据都比右边的小,可以...原创 2019-01-22 09:29:17 · 532 阅读 · 0 评论 -
不能用排序、求一个数组第k大的数字、时间复杂度为O(nlog₂k)
思想:既然不能用排序还要求数组第k大的数字,时间复杂度为O(nlog₂k),那么我们可以用快速排序的思想,因为快速排序每次都会确定待排序数组的一个基准在数组中合适的位置,那么只要我们得到一个基准的排序后位置下标等于k-1,那么这个位置的数字就是我们要找的这个数字;public class TestDemo6 { public static void main(String[] args...原创 2019-01-14 21:44:15 · 1069 阅读 · 0 评论 -
字符串的全排列和组合
字符串的全排列/** * @ClassName TestDemo37 * @Description 面38 全排列 * @Author lzq * @Date 2019/1/5 20:54 * @Version 1.0 **/public class TestDemo37 { public static int count = 0; //记录排列的种树 /**...原创 2019-01-06 01:53:29 · 1226 阅读 · 3 评论 -
序列化二叉树
题目描述;请实现两个函数,一个用来序列化二叉树、一个用来反序列化二叉树; StringBuffer stringBuffer = new StringBuffer(); /** * 序列化二叉树 * @param root */ public void Serialize(BinaryTreeNode root) { if(...原创 2019-01-05 20:44:51 · 910 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述:输入一颗二叉搜索树,将该二叉树转换成一个排序的双向链表,要求不能创建任何一个新的节点,只能调整节点中的指针;代码:剑指offer上的方法: static BinaryTreeNode node = null; public static BinaryTreeNode Convert(BinaryTreeNode root) { ConvertNod...原创 2019-01-05 19:30:22 · 310 阅读 · 0 评论 -
复杂链表的复制
题目描述:请实现一个函数复制复杂链表,在复杂链表中,每一个节点除了有一个指向下一个节点的next指针,还有一个指向链表中任意一个节点或为空的p指针;最好的方法如下:①把链表的每一个节点都clone一次,并将clone的节点连接在原来相应的节点后面;②把原来p指针不为空的节点找出来,将对应的clone的节点的p指针指向原节点的p指针指向的节点后面的节点;③将两个链表拆开;class...原创 2019-01-04 21:33:38 · 317 阅读 · 0 评论 -
判断一棵树是不是平衡二叉树
引用两种方法都要求树的深度,所以首先,求树的深度的方法如下: / * 求树的深度 * @param root * @return */ public static int TreeDepth(BinaryTreeNode root){ if(root == null) { return 0; ...原创 2019-01-27 14:22:29 · 1102 阅读 · 0 评论 -
队列的最大值
效率比较高的做法:使用双向队列(,队列中只存放当前元素的下标,设新来的元素为k,如果前面的元素比k小,直接把前面的删除(因为不可能成为后面窗口的最大值),如果前面的元素比k大,判断是否还在窗口范围内,不在则移除①先判断当前队列是否为空,如果不空而且当前元素比队列中尾端的元素大,将队列元素的尾端弹出;②判断队列头元素(存的是下标)是否还在滑动窗口范围中,不在则把头元素移除; /** ...原创 2019-01-27 17:56:43 · 1013 阅读 · 0 评论 -
树——树相关的常见问题
有关树的面试题:有关树的常见问题:如何得到树的节点个数?遍历这棵树,用一个值记录节点个数即可;如何得到以可树的高度?递归得到每个节点的左右子节点的高度,在加上当前节点自己,返回给上一层调用,这样就会一层一层的得到从每个叶子节点往上返回的高度,最终得到树的高度;如何得到一棵树的镜像?(就是每个节点的左右子节点调换位置);采用前序、中序、后序遍历中的任何一种,从叶子节点开始交...原创 2019-06-23 15:38:04 · 1328 阅读 · 0 评论 -
将字符串中的空格替换
public class TestDemo23 { /** * 先遍历一次字符串,把空格找出来计数,然后从后面往前面替换 * @param str * @param length * @return */ public static String replaceSpace(String str, int length) { ...原创 2018-10-22 19:46:52 · 778 阅读 · 0 评论 -
一个整形数组中除了两个数字只出现一次外,其它的数字都出现了两次,获取这两个数字
问题描述:一个整形数组中除了两个数字只出现一次外,其它的数字都出现了两次,获取这两个数字。思路1:1) 任何一个数字和自己本身做异或操作的结果都为0,任何一个数字和0做异或操作的结果都为数字本身。2) 将所有的元素一起做异或操作3) 异或操作的结果的二进制表示中,按照从右往左的顺序,找到第一个1出现的位置x4 )将数组中的元素分为两类:1> 第一类:从右边开始数第x位上的数字为...原创 2018-10-05 16:11:42 · 931 阅读 · 0 评论 -
1~n整数中1出现的次数
资料原创 2019-01-30 17:49:07 · 408 阅读 · 0 评论 -
数字序列中某一位的数字
/** * 得到第index位数主方法 * @param index * @return */ public static int get_number(int index) { if(index < 0) { return -1; } int digits = 1...原创 2019-01-30 16:46:54 · 517 阅读 · 0 评论 -
n个骰子的点数
思路:一个骰子有6个面,点数分别是1,2,3,4,5,6,那么n个骰子的最小点数和为n,最大点数和为6n;1、当只有一枚骰子时,它只有6种结果,即和为1,2,3,4,5,6这6种,抛一次骰子时每种结果都只可能会出现1次;2、当有n枚骰子时,抛一次时的最小点数和为n,最大点数和为6n,其他的点数和在这之间,当求点数和为k(n<k<6n)的出现次数,那f(k) = f(k-1)+f(...原创 2019-01-30 12:18:10 · 2343 阅读 · 0 评论 -
构建乘积数组
import java.util.Arrays;/** * @ClassName TestDemo66 * @Description 面66 * @Author lzq * @Date 2019/1/29 13:17 * @Version 1.0 **/public class TestDemo66 { public static void main(String[] a...原创 2019-01-29 13:41:34 · 215 阅读 · 0 评论 -
树中两个节点的最低公共祖先
以下几个方法中会用到的方法和类:class BinaryTreeNode { int data; BinaryTreeNode left; BinaryTreeNode right; BinaryTreeNode parent; public BinaryTreeNode(int data) { this.data = data; ...原创 2019-01-29 13:01:38 · 398 阅读 · 0 评论 -
树的子结构
题目描述:输入两个二叉树A和B,判断B是不是A的子结构;思路:①在树A中找到和树B的根节点值一样的节点R;②判断树A中以R为根节点的子树是不是包含树B一样的结构;注意:double值比较值是否相等时,不能直接写 == 去判断,因为在计算机内表示小数时(包括float和double型小数)都有误差,判断两个小数是否相等,只能判断他们之差的绝对值是不是在一个很小的范围内,如果这两个数相差很...原创 2019-01-02 16:26:10 · 267 阅读 · 0 评论 -
表示数值的字符串
题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如字符串“+100”、“5e2”、“-123”、“3.1416”、“-1E-16”都表示数值但“12E”、“1a3.14”、“1.2.3”、“±5”、“12e+5.4”都不是数值;表示数值的字符串遵循以下两种模式:①A.BeC或者A.BEC;②.BeC或者.BEC,其中,A表示数值的整数部分,B在小数点后面表示小数部...原创 2019-01-01 19:03:38 · 622 阅读 · 0 评论 -
二叉树的下一个节点
问题描述:给定一个二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点,树中的节点属性是:数据、指向左子节点、指向右子节点、指向父节点的指针;例:中序遍历:现在我们来分析如何找到给定的二叉树的节点下一个节点:1、如果当前给定的节点有右子树,那么下一个节点就是它的右子树中的最左节点,也就是说,从当前给定的节点的右子节点出发,一直沿着指向左子节点的指针,我们就能找到它的下一个节点;...原创 2018-12-26 13:09:20 · 665 阅读 · 0 评论 -
顺序表
顺序表是基于数组实现的import java.util.Arrays;/** * @ClassName TestSqlist * @Description 顺序表 * @Author lzq * @Date 2018/11/21 19:05 * @Version 1.0 **/class TestSqlist<T> { private T[] elem; ...原创 2018-05-08 01:40:27 · 292 阅读 · 0 评论 -
求十万个数据每个数据出现的次数
import java.util.ArrayList;import java.util.Random;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;/** * 十万数据重复统计并打印 * 1.10万数据存储 * 2.数据统计 *...原创 2018-10-26 18:08:02 · 554 阅读 · 0 评论 -
约瑟夫环
问题描述:一圈人(n个)围着一起报数,报到x的淘汰,规定最后场上剩下的y人为胜利者。 /** * 约瑟夫环,用数组方法解决 * @param personNumber 总人数 * @param number 报到就淘汰的数字 * @param survive 最后需要留的人数 */ public st...原创 2018-10-30 01:33:58 · 317 阅读 · 0 评论 -
从两个文件读取数据并找出它们重复次数最多的十个数
不考虑两个文件相同数据的重复次数要相加import java.io.*;import java.util.*;/** * @ClassName TestDemo13 * @Description 从两个文件读取数据并找出它们重复次数最多的十个数 * @Author lzq * @Date 2018/7/28 20:53 * @Version 1.0 **/public cla...原创 2018-10-20 02:59:02 · 615 阅读 · 0 评论 -
各进制数之间的转换
目录1、用要转进制的指数2、用栈进制 范围 前缀 后缀 备注 二进制 0~1 0b B BIN 八进制 0~7 0 O OCT 十进制 0~9 没有 D DEC 十六进制 0~9,A~F 0x H HEX (0 1 2 3 4 5 6 7 8 ...原创 2018-06-24 00:24:10 · 4589 阅读 · 0 评论 -
集合+IO相关习题、IO+多线程相关习题
1、提供一个文件操作的方法,其需要实现功能:对一个文件的任意位置可以插入任何内容public class TestDemo8 { /** * 提供一个文件操作的方法,其需要实现功能:对一个文件的任意位置可以插入任何内容 * @param filePath 文件路径 * @param postion 追加内容添加位置 * @param co...原创 2018-08-04 12:30:00 · 2284 阅读 · 0 评论 -
不使用循环的方式求1~n的和
1.用递归package study;public class LianXi { public static int Sum_Solution(int n){ //当n为0的时候只执行前面的条件,结果为false //当n大于0的时候可以执行到后面的条件,实现递归计算, int sum=n; boolean ret=...原创 2018-06-18 19:08:13 · 1199 阅读 · 0 评论 -
左旋数组
编写函数,将字符串从左数第n个开始进行旋转(也叫左旋数组),例如:String str = “abcdef”;从第二个开始旋转,旋转后的结果为:”cdefab”;。 思路:可以先将左旋前面的部分字符串逆置得到:“bacdef”;再将后面部分字符串逆置得到:”bafedc”;最后整体再逆置一次得到:”cdefab”;就完成了。package study;import java.util...原创 2018-06-20 11:42:58 · 1770 阅读 · 0 评论 -
将字符串反转
解题思路:现将整个字符串将"I am Student!"逆置,得到字符串"!tnedutS ma I",在逆置每一个单词,得到字符串"Student! am I";所以要写一个方法逆置数组,一个方法来判断单词,调用逆置数组的方法实现单词的逆置。 /** * 逆置数组 * @param array * @param a * @param b ...原创 2018-06-28 16:16:16 · 1032 阅读 · 0 评论 -
队列——优先级队列
优先级队列,按优先级插入数据:/** * @ClassName TestDemo8 * @Description 优先级队列 * @Author lzq * @Date 2018/5/5 16:59 * @Version 1.0 **/public class PrioQueue { class Entry { int data; //数据域 ...原创 2018-05-08 20:37:31 · 434 阅读 · 0 评论 -
自己实现一个类加载器
class MyClassLoader extends ClassLoader{ @Override protected Class<?> findClass(String name) throws ClassNotFoundException { String Dir="D:";//用户自定义路径进行拼接 ...原创 2018-06-28 19:15:15 · 638 阅读 · 0 评论 -
根据前序、中序遍历结果重建二叉树
如果已知一个二叉树的前序、中序遍历结果,要重建一个二叉树,步骤如下:例:二叉树的前序遍历结果:{1,2,4,7,3,5,6,8};中序遍历结果:{4,7,2,1,5,3,8,6};我们知道树的前序遍历第一个数就是根节点,而在中序遍历中,前面是左子树,中间是根节点,后面是右子树,于是对于这个二叉树:1、根节点:12、左子树(就是在中序遍历中找到根节点,前面的数就是左子树的所有节点):中序...原创 2018-12-25 14:02:29 · 787 阅读 · 0 评论 -
基本数学问题——矩阵运算
1、矩阵加法、减法只需要将两矩阵的对应项相加(或相减)即可;注意:矩阵加法、减法运算时必须保证两个矩阵的行数、列数必须相等;2、矩阵乘法对于给定的mn矩阵A和nk矩阵B,其乘积矩阵为C=AB;这里矩阵C为m*k阶的;C[i][j] = ∑A[i][t]B[t][j] (0≤t≤n-1)第一个矩阵的第i行所有元素与矩阵B的第j列所有元素对应相乘,再把所得的结果相加结果就是矩阵C的第...原创 2018-12-01 15:20:36 · 1988 阅读 · 0 评论 -
java——自己写一个生成随机数的方法
在java中,主要有三种获得随机数的方法:1、Math.random();这个方法生成的是0~1之间的一个double;2、java.util的Random类,创建该类的对象来产生随机数(int、float、double、long)3、System类中的currentTimeMillis()方法,该方法返回一个long类型的毫秒数(1970年1月1日0时0分0秒到目前的一个毫秒数),可以作为...原创 2018-11-30 21:47:37 · 6210 阅读 · 0 评论 -
快速排序基准位置的选取方法和快速排序优化
一、 快速排序基准位置的选取方法1.固定位置法(就是选取的基准是固定的、一般是数组的第一个元素)2.随机选取基准法/** * 快速排序,递归实现 * 时间复杂度:好:O(无序)(nlog2n),坏(有序):O(n^2) * 空间复杂度: * 稳定性:不稳定 * (每次分割比较均匀的时候 效率较高 */public class LianXi { public sta...原创 2018-10-27 19:29:07 · 4326 阅读 · 7 评论 -
经典算法问题
目录1、巴斯卡三角形(杨辉三角)2、三色旗问题3、Eratosthenes 筛选求质数1、巴斯卡三角形(杨辉三角)要求打印出如下图形: 1 1 1 1 2 1 1 3 3 1 ...原创 2018-10-26 16:54:41 · 479 阅读 · 0 评论 -
使用命令查看魔数
要想要加载一个类,首先要识别.class文件:通过魔数,魔数的唯一作用是确定这个文件是否为一个能被虚拟机接受的class文件,魔数固定为0xCAFEBABE(就是每个class文件的前四个字节都必须是这个),不会改变; 就是把class文件的前四个字节标记为0xCAFEBABE,以便虚拟机去识别它;可以拿命令查看魔数(MD5后面那个就是魔数):javap -verbose 类名首先随便写...原创 2018-10-25 16:01:51 · 1218 阅读 · 0 评论