剑指offer
Star_Li_92
学如逆水行舟,不进则退。
展开
-
求最长回文子串(百度测试开发一面面试题目)
一、判断一个字符串是否为回文字符串输入:从键盘输入一个字符串。输出:判断一个字符串是否为回文字符串,是的话输出YES,不是的话输出NO。 public class Main { public static void main(String[] args) { String str = ""; System.out.println("请输入一个字符串"); Scanner i...原创 2018-10-15 22:57:09 · 589 阅读 · 0 评论 -
剑指offer——删除链表中重复的结点
剑指offer——删除链表中重复的结点题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5我的解答:分情况讨论,非递归情况一:从头结点一直走到不含重复结点的节点处。即找到第一个pHead.v原创 2018-06-21 14:40:46 · 163 阅读 · 0 评论 -
Java——求二叉树的深度
Java——求二叉树的深度题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。利用递归求解class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tree...原创 2018-06-06 17:29:05 · 5497 阅读 · 0 评论 -
剑指offer——连续子数组的最大值
剑指offer——连续子数组的最大值题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个...原创 2018-05-30 18:47:44 · 271 阅读 · 0 评论 -
剑指offer——二叉搜索树与双向链表
剑指offer——二叉搜索树与双向链表1 题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。2 利用非递归2.1 经典编码:利用中序遍历打印二叉搜索树package com.offer;import java.util.Stack;class TreeNode{ int val=0;...原创 2018-05-30 16:51:45 · 459 阅读 · 0 评论 -
剑指offer——两个链表的第一个公共节点
剑指offer——两个链表的第一个公共节点题目描述输入两个链表,找出它们的第一个公共结点。我的未通过解法:空指针异常class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solu...原创 2018-06-06 12:19:11 · 222 阅读 · 0 评论 -
剑指offer——链表中环的入口结点
剑指offer——链表中环的入口结点1 题目描述一个链表中包含环,请找出该链表的环的入口结点。2 我的思路直接利用链表,过程如下:定义链表结构,增设一个flag,初始flag为false;然后遍历链表,每访问一个结点,将flag赋值为true;访问下一个结点时,判断其flag值,若为true,则为第二次访问该结点,则该结点必定为环的入口结点。代码如下:cla...原创 2018-06-20 21:23:26 · 184 阅读 · 0 评论 -
剑指offer——数组中的逆序对
剑指offer——数组中的逆序对题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述: 题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size...原创 2018-06-06 09:49:27 · 202 阅读 · 0 评论 -
剑指offer——复杂链表复制(具有两个指针的链表进行复制)
剑指offer——复杂链表复制(具有两个指针的链表进行复制)1 题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)2 编程思路参照别人的解题思路,进行了三步: 第一步:复制链表,但是不理会node.rand...原创 2018-05-29 23:27:46 · 384 阅读 · 0 评论 -
剑指offer——二叉树路径输出
剑指offer——二叉树路径输出1 题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。2 分析利用深度优先遍历,答案为:import java.util.ArrayList;/**public class TreeNode { int val = 0; Tree...原创 2018-05-29 19:29:23 · 1623 阅读 · 0 评论 -
剑指offer——二叉搜索树的后续遍历序列
剑指offer——二叉搜索树的后续遍历序列题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解答答案package com.test;import java.util.Scanner;public class TestSolution { public static...原创 2018-05-26 16:02:35 · 267 阅读 · 0 评论 -
剑指offer——不用+、-、*、/运算符,计算两个数的和
剑指offer——不用+、-、*、/运算符,计算两个数的和1 题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。2 我的思路钻空子:利用+=运算符,两行代码搞定。3 我的代码public class Solution { public int Add(int num1,int num2) { num1 +=nu...原创 2018-05-15 23:25:30 · 1204 阅读 · 0 评论 -
剑指offer——利用逻辑与的短路操作实现1到n的求和
剑指offer——利用逻辑与的短路操作实现1到n的求和1 题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。2 题目分析没有想到思路,看到答案之后才发现,可以利用逻辑与的短路操作实现该问题的求解!!!当然,注意配合递归使用!3 答案public class Solution ...原创 2018-05-15 23:02:45 · 244 阅读 · 0 评论 -
剑指offer——平衡二叉树的判定
剑指offer——平衡二叉树的判定题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。我的解法:利用求二叉树的深度判断平衡二叉树解法一:递归判断public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null){ ...原创 2018-06-06 19:17:16 · 223 阅读 · 0 评论 -
剑指offer——和为S的连续整数序列
剑指offer——和为S的连续整数序列题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck...原创 2018-06-06 20:25:46 · 262 阅读 · 0 评论 -
剑指offer——和为S的两个数
剑指offer——和为S的两个数题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。我的解答import java.util.ArrayList;public class Solution { /*常规做...原创 2018-06-06 22:02:28 · 224 阅读 · 0 评论 -
剑指offer——字符流中第一个不重复字符
剑指offer——字符流中第一个不重复字符题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。解答思路:利用数组模拟hashtable。pu...原创 2018-06-18 17:48:10 · 211 阅读 · 0 评论 -
剑指offer——二叉搜索树的第k个结点
1、题目描述给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。2、我的解答利用二叉搜索树的中序遍历结果为单调递增性质,对该二叉搜索树进行中序遍历,并将中序遍历结果存入数组中,在主函数中调用其中序遍历函数,并返回数组中的第k-1个结点。 源码如下:import java.util.Ar...原创 2018-06-24 11:31:30 · 209 阅读 · 0 评论 -
剑指offer——序列化二叉树
剑指offer——序列化二叉树1、序列化知识点一:二叉树序列化(持久化)二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于 先序、中序、后序、按层 的二叉树遍历方式来进行修改。原理都是一样的(即遍历顺序不同而已,对每个结点的处理都是一样的),序列化的结果是一个字符串,序列化时通过 某种符...原创 2018-06-24 10:11:18 · 538 阅读 · 0 评论 -
剑指offer——把二叉树打印成多行
剑指offer——把二叉树打印成多行1、题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。2、我的解法参照上一个题(按之字形打印二叉树),此处利用两个队列,进行一行一行的打印。 源码如下:import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;...原创 2018-06-24 07:56:01 · 265 阅读 · 0 评论 -
剑指offer——按之字形打印二叉树
剑指offer——按之字形打印二叉树1、题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。2、我的思路隔行,奇数行存在队列里,偶数行存在栈中。错误解法:import java.util.ArrayList;import java.util.Stack;import ja...原创 2018-06-23 21:12:00 · 278 阅读 · 0 评论 -
剑指offer——扑克牌顺子(字符串)
剑指offer——扑克牌顺子(字符串)1 题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字...原创 2018-06-15 21:16:12 · 202 阅读 · 0 评论 -
剑指offer——翻转单词顺序列
剑指offer——翻转单词顺序列1 题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不...原创 2018-06-15 20:38:15 · 408 阅读 · 0 评论 -
剑指offer——左旋转字符串
剑指offer——左旋转字符串1 题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!2 知识点复习Java从入门到精通——字符串...原创 2018-06-15 19:22:41 · 200 阅读 · 0 评论 -
剑指offer——丑数
剑指offer——丑数题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。答案根据别人的思路写的:import java.util.ArrayList;public class Solution { public int Get...原创 2018-06-01 00:04:08 · 127 阅读 · 0 评论 -
剑指offer——把数组排成最小的数
剑指offer——把数组排成最小的数1 题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。2 题目分析利用排序,改写比较器进行排序。 Java中的Collections类import java.util.ArrayList;import ...原创 2018-05-31 21:19:03 · 147 阅读 · 0 评论 -
剑指offer——对称二叉树判断
剑指offer——对称二叉树判断1 题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。2 我的错误解答思路:利用二叉树中序遍历和对称中序遍历相等来解决该问题。 错误原因:中序遍历中输出序列存入到数组中出现错误!/*public class TreeNode { int val = 0;...原创 2018-06-21 23:37:40 · 209 阅读 · 0 评论 -
剑指offer——二叉树中序遍历的下一个结点
剑指offer——二叉树中序遍历的下一个结点1 题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2 我的解答:由于分类不合理造成了错误!讨论不完善,错误!!分类不合理!!!分类讨论:给定结点有右子树,则中序遍历的下一个必定为右子树的最左结点。利用while循环找到右子树的最左边的...原创 2018-06-21 16:37:17 · 393 阅读 · 0 评论 -
剑指offer——数字在排序数组中出现的次数
剑指offer——数字在排序数组中出现的次数1 题目描述统计一个数字在排序数组中出现的次数。2 我的思路很简单的一个思路是:对数组进行排序:利用sort()函数对数组进行递增排序;增加一个计数器count;利用for循环对数组进行遍历,若遍历元素大于数字k,则break,跳出for循环;若遍历元素等于数字k,计数器加1count++。3 代码import jav...原创 2018-05-15 22:31:45 · 189 阅读 · 0 评论 -
剑指offer——数组中只出现一次的数字
剑指offer——数组中只出现一次的数字1 题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。2 我的解题思路由题目描述可知,该数组肯定是偶数数组,因此可以先对数组内元素进行排序:Arrays.sort(array);,然后对数组内元素进行两两比较,若不同,则找到了该数字。 因此该编码最简单的方式是利用两个for循环,对数组进...原创 2018-05-14 23:11:22 · 926 阅读 · 0 评论 -
剑指offer——第一个只出现一次的字符位置
剑指offer——第一个只出现一次的字符1 题目描述在一个字符串(1&lt;=字符串长度&lt;=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置2 分析这道题最简单的思路是:将字符转换成字符数组,遍历字符数组(第一个for循环),针对每个字符,挨个判断字符数组中的字符是否出现了一次(第二个for循环),返回第一个出现一次的字符下标。 暴利搜索!3 完...原创 2018-05-14 20:30:50 · 170 阅读 · 0 评论 -
剑指offer——最小的k个数(数组:ArrayList类)
剑指offer——最小的k个数(数组:ArrayList类)1 必备知识点: 首先要熟悉Java从入门到精通——数组+foreach2 ArrayList简介ArrayList:动态数组,是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和IList接口 灵活的设置数组的大小一个不错的总结:Java 集合系列...原创 2018-04-10 21:46:20 · 383 阅读 · 1 评论 -
剑指offer——矩形覆盖(递归,斐波那契数列)
剑指offer——矩形覆盖(递归,斐波那契数列)1 题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?2 解答:思路:根据数列规律,发现: target=1:返回1; target=2:返回2; target=3:返回1+2=3; target=4:返回2+3=5; ...原创 2018-04-10 20:51:58 · 234 阅读 · 0 评论 -
剑指offer——二进制中1的个数(原码、反码、补码、移位)
剑指offer——二进制中1的个数(原码、反码、补码、移位)1 知识储备1.1 原码、反码、补码,计算机中负数的表示1.1.1 源码原码: 将一个整数,转换成二进制,就是其原码。 如单字节的5的原码为:0000 0101;-5的原码为1000 0101。1.1.2 反码 反码: 正数的反码就是其原码; 负数的反码是将原码中,除符号位以外,每一位取反。 如单字节的...原创 2018-04-10 20:29:28 · 777 阅读 · 0 评论 -
剑指offer——重构二叉树
剑指offer——重构二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。我的答案解题思路:利用递归。首先遍历先序遍历数组pre[],第一个元素(即pre[0])肯定是该...原创 2018-04-15 17:40:28 · 341 阅读 · 0 评论 -
剑指offer——数值的整数次方
剑指offer——数值的整数次方题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。我的错误解法:public class Solution { public double Power(double base, int exponent) { if(exponent==0){...原创 2018-04-02 21:02:00 · 234 阅读 · 0 评论 -
剑指offer——变态跳台阶
剑指offer——变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。我的解法public class Solution { public int JumpFloorII(int target) { int a=1,sum=1; if(target<=0)...原创 2018-04-02 20:44:39 · 168 阅读 · 0 评论 -
剑指offer——构建乘积数组
剑指offer——构建乘积数组题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。我的解法import java.util.ArrayList;public class Solution { public int[] multiply(...原创 2018-04-14 22:34:24 · 161 阅读 · 0 评论 -
剑指offer——跳台阶
剑指offer——跳台阶题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。我的解法:public class Solution { public int JumpFloor(int target) { int num=0,a=1,b=2; if(target<=0) ...原创 2018-04-02 16:16:57 · 161 阅读 · 1 评论 -
剑指offer——旋转数组的最小数字
剑指offer——旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路一:遍历数组,直到找到符合要求的元素考虑到数组的特性,...原创 2018-04-09 16:42:30 · 92 阅读 · 0 评论