剑指offer
扎个冲天揪
冲冲冲冲冲冲鸭
展开
-
【俄罗斯套娃信封问题】【堆积木】
俄罗斯套娃信封问题https://leetcode-cn.com/problems/russian-doll-envelopes/ 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封...原创 2019-07-30 11:34:04 · 779 阅读 · 0 评论 -
剑指offer_【49】把字符串转换成整数
1.题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1:输入+21474836471a33输出...原创 2019-07-03 19:35:59 · 70 阅读 · 0 评论 -
剑指offer_【48】不用加减乘除做加法
title:date: 2019-05-12 09:57:08tags: 数组类型题category: 剑指offer1.题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。2.解题思路利用&、|、^等运算(1)定义一个sum和一个进位位carry,sum用来记录二进制的两位数无进位相加得到的值(num1^num2),进位位carr...原创 2019-07-02 15:33:16 · 80 阅读 · 0 评论 -
剑指offer_【47】求1+2+...+n
1.题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。2.解题思路1.需利用逻辑与的短路特性实现递归终止。2.当n==0时,(n>0)&&((ans+=Sum_Solution(n-1))>0)只执行前面的判断,不执行后面的递归了,使这条语句为false,并且...原创 2019-07-02 15:30:59 · 63 阅读 · 0 评论 -
剑指offer_【46】孩子们的游戏(圆圈中最后剩下的数)
1.题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:(1)首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。(2)每次喊到m-1的那个小朋友要出列唱歌,然后在礼品箱中任意的挑选礼物,并且不再回到圈中。(3)从他的下一个小朋友开始,继续0…m-1报数...原创 2019-07-02 15:29:06 · 150 阅读 · 0 评论 -
剑指offer_【45】扑克牌顺子
1.题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大/小王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的...原创 2019-07-02 15:25:22 · 114 阅读 · 0 评论 -
剑指offer_【44】翻转单词顺序列
1.题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?2.解题思路...原创 2019-07-02 15:21:37 · 113 阅读 · 0 评论 -
剑指offer_【43】左旋转字符串
1.题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!2.解题思路两个子字符串 拼接就行了。3.代码public class So...原创 2019-07-02 15:19:33 · 75 阅读 · 0 评论 -
剑指offer_【42】和为s的两个数字
1.题目描述一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。2.解题思路将数组的数值依次放入list里面,每次放入之前查询list里面是否有(sum-array[i]),如果有,再判断两数乘积是否比之前存的两数乘积小,如果判断成功,则将这两个数放到in...原创 2019-07-02 15:15:38 · 88 阅读 · 0 评论 -
剑指offer_【41】和为S的连续正数序列
1.题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!2.解题思路滑动窗口移动方法...原创 2019-07-02 15:12:08 · 80 阅读 · 0 评论 -
剑指offer_【40】数组中只出现一次的数字
1.题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。2.解题思路将数组依次放到list里面,如果list里面含有准备要进去的数值,则remove掉,剩下的两个数组即为该数组中只出现过一次的数字list.remove要用(Object object)方法而不是list.remove(int index);3.代码//num1...原创 2019-07-02 15:09:32 · 75 阅读 · 0 评论 -
剑指offer_【39】平衡二叉树
1.题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。2.解题思路预备知识:平衡二叉树是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。思想:从根节点开始,先判断左右子树的高度差是否超过1,然后接着判断左右子树是否是平衡二叉树。这边用到了递归思想。代码如下:3.代码public class Solution { public b...原创 2019-07-02 15:08:13 · 71 阅读 · 0 评论 -
剑指offer_【38】二叉树的深度
1.题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。2.解题思路①如果一棵树只有一个结点,它的深度为1。②如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。-③如果既有右子树又有左子树,那该树...原创 2019-07-02 15:06:05 · 75 阅读 · 0 评论 -
剑指offer_【37】数字在排序数组中出现的次数
1.题目描述统计一个数字在排序数组中出现的次数。2.解题思路排序数组嘛,找到数组里面第一个等于k的,一直res++直到数组值不等于k。3.代码public class Solution { public int GetNumberOfK(int [] array , int k) { int res = 0; if (array == null...原创 2019-07-02 15:04:27 · 90 阅读 · 0 评论 -
剑指offer_【36】两个链表的第一个公共结点
1.题目描述输入两个链表,找出它们的第一个公共结点。 2.解题思路两个链表有公共点,考虑Y型的两链表相连,先计算出两个链表的长度,然后长的链表先走差值步,之后同步走,当遇到cur1==cur2时说明两链表相遇。直接返回即可。3.代码/*public class ListNode { int val; ListNode next = null; ListNode...原创 2019-07-02 15:01:48 · 78 阅读 · 0 评论 -
剑指offer_【50】数组中重复的数字
1.题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。2.解题思路长度为n,数字都在[0,n-1]范围,可以利用桶排序的思想,将numbers[i]的个数存入相...原创 2019-07-03 19:40:05 · 106 阅读 · 0 评论 -
剑指offer_【51】构建乘积数组
1.题目描述给定一个数组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]。不能使用除法。2.解题思路题目的意思就是B[i] = A[0]*A[1]…*A[n-2]*A[n-1] / A[i],但是题目要求不能用除法创建一个left数组和一个rigth数组,拿n = 3为例...原创 2019-07-03 19:41:44 · 84 阅读 · 0 评论 -
剑指offer_【52】正则表达式匹配
1.题目描述请实现一个函数用来匹配包括’.‘和’*‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。2.解题思路这道题的核心其实在于分析’*’,对于’.‘来说,它和任意字符都匹配...原创 2019-07-03 19:43:24 · 66 阅读 · 0 评论 -
剑指offer_【66】机器人的运动范围
1.题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?2.解题思路本题使用的方法同样还...原创 2019-07-03 20:22:22 · 76 阅读 · 0 评论 -
剑指offer_【65】矩阵中的路径
1.题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。例如a b c es f c sa d e e这样的3 * 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不...原创 2019-07-03 20:21:33 · 90 阅读 · 0 评论 -
剑指offer_【64】滑动窗口的最大值
1.题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。输入描述:{2,3,4,2,6,2,5,1} ,3输出描述:{4,4,6,6,6,5}解析:存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:{[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {...原创 2019-07-03 20:16:46 · 83 阅读 · 0 评论 -
剑指offer_【63】数据流中的中位数
1.题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。2.解题思路用一个list存储插入的数,然后对其进行排序(1) size == 0 , ...原创 2019-07-03 20:14:44 · 82 阅读 · 0 评论 -
剑指offer_【62】二叉搜索树的第K个结点
1.题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。2.解题思路方法1:用PriorityQueue将所有结点放到queue中,再依次弹出里面的数据(队首数据依次弹出),弹出的第k个数据就是要求的数值,再将它构建成TreeNode即可。方法2:根据二叉搜索树的特点,左子树上的点小于该点,右...原创 2019-07-03 20:12:41 · 62 阅读 · 0 评论 -
剑指offer_【61】序列化二叉树
1.题目描述请实现两个函数,分别用来序列化和反序列化二叉树 2.解题思路二叉树的序列化把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于 先序、中序、后序、按层 的二叉树遍历方式来进行修改。原理都是一样的(即遍历顺序不同而已,对每个结点的处理都是一样的),序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(...原创 2019-07-03 20:07:18 · 68 阅读 · 0 评论 -
剑指offer_【60】把二叉树打印成多行
1.题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 2.解题思路利用层次遍历二叉树的方式,用一个队列进行辅助,每次打印前取n = queue.size(),可以保证逐行打印。3.代码import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = nul...原创 2019-07-03 20:03:47 · 94 阅读 · 0 评论 -
剑指offer_【59】按之字形顺序打印二叉树
1.题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。2.解题思路用一个布尔量控制从左到右还是从右到左的顺序;如果为真则他的左右孩子按照从左到右的顺序放入list中,否则按照从右到左的顺序,当本行结束之后,再把list中的数据放入一个result中。其中用一个null值作为层次...原创 2019-07-03 20:02:50 · 82 阅读 · 0 评论 -
剑指offer_【58】对称的二叉树
1.题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。2.解题思路【分析1】首先我们需要明确一下镜像二叉树的概念,简单来说就是左子树与右子树对调。而根据树的递归定义可以,左子树和右子树的定义也是递归而言的。【分析2】接下来我们需要明确两棵二叉树什么时候相同。显然,根结点的值相等,左右子树相同,则这两颗二叉树相...原创 2019-07-03 20:01:05 · 80 阅读 · 0 评论 -
剑指offer_【57】二叉树的下一个结点
1.题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2.解题思路情况1:该节点有右子树: 6 / \ 3 10 / \ / \ 2 5 8 ...原创 2019-07-03 19:57:26 · 63 阅读 · 0 评论 -
剑指offer_【56】删除链表中重复的结点
1.题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 2.解题思路方法一:重头构建该链表(1) 新建两个list,一个用于存放只出现一次的数值,一个存放重复的数值(2) 将只出现过一次的数重头构建...原创 2019-07-03 19:54:55 · 79 阅读 · 0 评论 -
剑指offer_【55】链表中环的入口结点
1.题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。2.解题思路方法1:利用hashSet不存储重复值的思想方法2: 链表包含环,像数字6的图形。 - (1)设置快慢指针,假设快指针在环内与慢指针相遇,设头节点到入口结点的距离为x,入口结点到相遇点为y,相遇点到入口结点距离为z,则有(x+y)*2 = (x+y+z+y),即z = x,...原创 2019-07-03 19:53:11 · 89 阅读 · 0 评论 -
剑指offer_【54】字符流中第一个不重复的字符
1.题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。2.解题思路 桶排序思想3.代码//源源不断的有字母放到字符串中,建立一个256个大小的int型数组来代表哈希表public class Soluti...原创 2019-07-03 19:49:35 · 77 阅读 · 0 评论 -
剑指offer_【53】表示数值的字符串
1.题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。2.解题思路(1) 先判断每个字符是否合法(2) 正负号的位置和e不能在结尾位置(3) 小数点只能存在一个(...原创 2019-07-03 19:47:13 · 83 阅读 · 0 评论 -
剑指offer_【35】数组中的逆序对
1.题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007注 : 题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,siz...原创 2019-07-02 15:00:11 · 66 阅读 · 0 评论 -
剑指offer_【34】第一个只出现一次的字符位置
1.题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).2.解题思路1.用两个list,一个list1用来存放只出现一次的字符,一个list2用来存放出现多次的字符2.依次遍历str里面的字符,如果list1和list2里面都没有,则说明这个字符是第一次出现,将其添...原创 2019-07-02 14:52:29 · 91 阅读 · 0 评论 -
剑指offer_【33】丑数
1.题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。2.解题思路丑数的定义是1或者因子只有2 3 5,可推出丑数 = 丑数 * 丑数,假定丑数有序序列为:a1 , a2 , a3 … an所以可以将以上序列(a1 = 1除外)可以分成3类,必...原创 2019-07-02 14:48:43 · 135 阅读 · 0 评论 -
剑指offer_【15】反转链表
1.题目描述输入一个链表,反转链表后,输出新链表的表头。2.解题思路用一个栈stack依次存储ListNode里面的值,因为stack的特点是先进后出,故依次弹出即为反转链表用一个链表temp依次存储弹出的值,依次next存入下一个链表值,链表res指向这个temp的头节点反转链表的结果为res.next,因为我们之前设temp的头节点为-1(自己设的)。3.代码...原创 2019-07-02 13:48:42 · 96 阅读 · 0 评论 -
剑指offer_【14】链表中倒数第K个结点
1.题目描述输入一个链表,输出该链表中倒数第k个结点。2.解题思路先用一个count计算出链表的长度,如果count<k,返回null链表的倒数第K个即为链表的正数(count-k+1)个,一个for循环,将指针轮询到那个点,然后再将起后面截断(head.next = null)即可。3.代码/*public class ListNode { int val...原创 2019-07-02 13:47:08 · 77 阅读 · 0 评论 -
剑指offer_【13】调整数值顺序使奇数位于偶数前面
1.题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2.解题思路依次遍历array数组,遇到奇数存到原来的array数组前面,遇到偶数放到res数组,然后将两个数组拼接即可。3.代码public class Solution { public...原创 2019-07-02 13:45:32 · 86 阅读 · 0 评论 -
剑指offer_【12】数值的整数次方
1.题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方2.解题思路(1)exponent > 0,如2^3,则可以直接运算得出结果(2)exponent < 0,如2^-3, 则结果为(1/2) ^3(3)exponent = 0,如2^0,则结果为13.代码 public class ...原创 2019-07-02 13:43:26 · 76 阅读 · 0 评论 -
剑指offer_【11】二进制中1的个数
1.题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。2.解题思路方法1:直接将其转成二进制数组方法2:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。3.代码方法1:public class Solution { public int NumberOf...原创 2019-07-02 11:35:53 · 72 阅读 · 0 评论