剑指offer
文章平均质量分 60
Lynn_Baby
这个作者很懒,什么都没留下…
展开
-
剑指offer-二进制中1的个数-java
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路解析:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的...原创 2018-09-06 10:05:10 · 193 阅读 · 0 评论 -
剑指offer-滑动窗口的最大值-Java
题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在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}, {2,3,[4,2,6],2,5...原创 2018-05-13 00:05:22 · 352 阅读 · 0 评论 -
剑指offer-数据流中的中位数-java
题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路解析:用一个大根堆和一个小根堆来找中位数,大根堆除了堆顶都是最小的那部分数,小根堆除了堆顶都是最大的那部分数字如果是奇数的话是小根堆的堆顶元素,否则是大根堆和小根堆的堆顶元素的平均数注意Priorit...原创 2018-04-26 21:30:33 · 341 阅读 · 0 评论 -
剑指offer-二叉搜索树的第k个结点-java
题目描述:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。思路解析:二叉树的中序遍历,从小到大输出结点用栈来存储结点,并且计数。循环条件:结点不为空,栈不为空结点不为空就入栈,否则就出栈,遍历到第k结点就要跳出循环代码:import java.util.Stack;/*public class Tr...原创 2018-04-26 17:31:04 · 163 阅读 · 0 评论 -
剑指offer-删除链表中重复的结点-java
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路解析:需要两个指针来判断是不是有相等的值先用一个指针找没有重复的结点,那么就把preNode赋给它如果有重复的结点,就要找到下一个结点,然后把preNode换成下一个...原创 2018-04-26 15:59:12 · 177 阅读 · 0 评论 -
剑指offer-链表中环的入口结点-java
题目描述:一个链表中包含环,请找出该链表的环的入口结点。思路解析:快慢指针可以检查链表中的环,如果相遇就是有环找入口的方法是省略许多圈后,举个简单的例子,下面这种情况是c+a=a+b,此时c=b,所以相遇点继续向前到达入口的距离是和头结点到入口的距离是一样的。 代码:/* public...原创 2018-04-25 17:03:53 · 149 阅读 · 0 评论 -
剑指offer-字符流中第一个不重复的字符-java
题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。思路解析:用HashMap来记录每个字符出现了几次,用ArrayList来记录顺序。代码:import java.ut...原创 2018-04-25 14:44:05 · 120 阅读 · 0 评论 -
剑指offer-数字在排序数组中的出现的次数-java
题目描述:统计一个数字在排序数组中出现的次数。思路解析:已经排好序的数组,肯定是二分法查找找到最前面的下标,找到最后的下标,就可以进行计算此方法是用非递归方法注意在做题时遇到了一个问题:java.lang.ArrayIndexOutOfBoundsException:-1,这是因为代码中的那两个顺序写反了代码:public class Solution { public int GetNu...原创 2018-04-24 15:06:59 · 189 阅读 · 0 评论 -
剑指offer-包含min函数的栈-java
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路解析:每次都要记录栈的最小值,如果入栈的元素比原来的小,那就更新最小值每次出栈后,最小值如果出栈了,那么就变成记录次小值了那这样的话,原数据栈中入栈一个元素,就会有一个此时的最小值记录下来,但是当此数据出栈后,就是次小值的。这样就需要一个辅助栈stack_min来表示入栈的每一个元素对应的栈的最小值代码:impor...原创 2018-04-19 22:17:22 · 206 阅读 · 0 评论 -
剑指offer-二叉搜索树与双向链表
题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路解析:用栈来做,把根节点的左子树,左子树的左子树,......全部放入栈中,然后弹出的肯定是最小值注意要把最左边的作为头节点,存起来list只要栈不为空,或者是root还有节点,就可以一直去连接访问过的节点存为pre,可以进行下一次的循环代码:import java.ut...原创 2018-04-24 10:57:45 · 132 阅读 · 0 评论 -
剑指offer-按之字形顺序打印二叉树-java
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路解析:需要两个栈来辅助输出之字形的二叉树的结点值。单数栈是单数行的输出,在出栈的过程中,需要把出栈结点的左右子树放入双数栈中,先左后右,这样输出就是从后向前了双数栈是双数行的输出,在出栈的过程中,需要把出栈结点的左右子树放入单数栈中,先右后左...原创 2018-04-13 16:28:22 · 677 阅读 · 2 评论 -
剑指offer-判断二叉树是否是对称的-java
题目描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路解析:判断是不是空结点,是的话直接是对称的判断两边的左右子树是不是对称的,左右子树为空,返回true;有一个为空则是false还要判断两个结点是不是相等的,然后左子树的左子树和右子树的右子树相等,中间的两个相等。代码:public class TreeNode { ...原创 2018-04-13 14:02:01 · 362 阅读 · 1 评论 -
剑指offer-二叉树的下一个结点-java
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路解析:代码:public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { TreeLinkNode node = null; ...原创 2018-04-13 13:24:33 · 188 阅读 · 0 评论 -
剑指offer-平衡二叉树-java
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路解析:平衡二叉树:左右子树的深度不超过1此题需要定义定义一个类,这样depth才不会因为作用域和作用范围的问题传不过去啊。左右子树的差都要小于1。代码:public class Solution { class Deepth{ int val=0; } public boolean IsBalanc...原创 2018-04-13 11:18:27 · 248 阅读 · 0 评论 -
剑指offer-二叉树的深度-java
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路解析:如果一棵树只有一个结点,它的深度为1。如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。如果既有右子树又有左子树,那该树的深度就是其左、右子树深度的较大值再加1。...转载 2018-04-13 10:07:30 · 157 阅读 · 0 评论 -
剑指offer-把二叉树打印成多行-java
题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路解析:使用队列,层序遍历数组,同样采用一个元素出队后,就把他的左右孩子加进来,不同的是需要计数每一层的元素个数代码:import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/*public class TreeNo...原创 2018-04-12 17:33:09 · 252 阅读 · 1 评论 -
剑指offer-二叉树中和为某一值的路径-java
题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路解析:首先把根节点放入list中,然后target更新为去掉根节点值后的数字判断是否是叶子节点,如果是叶子节点,并且target更新为0,此时符合要求,加入到listAll中如果不是叶子节点,那就继续访问子节点。访问结束需要将list中最后一个删...原创 2018-04-12 16:26:46 · 175 阅读 · 0 评论 -
剑指offer-二叉搜索树的后序遍历序列-java
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路解析:二叉搜索树又称二叉排序树,根节点比左子树任意节点值大,比右子树的任意节点值小。而后序遍历的最后一个是根节点。于是:将数组的从前到后的数据跟最后一个值比较,找到比根节点大的数组下标,这也是右子树的开始位置然后判断右子树是不是都比根节点大,否则返...原创 2018-04-12 14:11:45 · 525 阅读 · 1 评论 -
剑指offer-矩阵中的路径-java
题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据...原创 2018-05-13 14:32:30 · 242 阅读 · 0 评论 -
剑指offer-机器人的运动范围-java
题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子思路解析:方格可以看成m*n的矩阵,要判断一个是...原创 2018-05-13 16:30:54 · 248 阅读 · 0 评论 -
LeetCode—search-in-rotated-sorted-array(旋转数组)—java
LeetCode:search-in-rotated-sorted-array查找旋转数组中数字的位置题目描述:Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e.,0 1 2 4 5 6 7might become4 5 6 7 0 1 2).You are given a ...原创 2018-06-12 14:27:19 · 441 阅读 · 0 评论 -
剑指offer-用栈实现队列-java
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路解析:入栈:栈1是用来入栈的,栈2是辅助; 如果栈2是空的,直接入栈到栈1中,如果栈2不为空,那么就先把栈2中的push回栈1中,再入栈。 出栈:栈2是用来出栈的,栈1是辅助; 如果栈1是非空的,要把栈1的都push到栈2中,如果栈1是空的,那...原创 2018-09-05 14:34:08 · 207 阅读 · 0 评论 -
LeetCode—string-to-integer-atoi(字符串转换成整数int)—java
题目描述:Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input c...原创 2018-06-05 18:06:32 · 506 阅读 · 0 评论 -
LeetCode—longest-palindromic-substring(最长回文子串)—java
题目描述:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.思路解析:对于查找回文的子串,分为两种:a...原创 2018-06-05 14:32:03 · 175 阅读 · 0 评论 -
LeetCode—reverse-integer(反转整数)—java
题目描述:Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321click to show spoilers.Have you thought about this?Here are some good questions to ask before coding. Bonu...原创 2018-06-05 17:10:32 · 602 阅读 · 0 评论 -
LeetCode—zigzag-conversion(之字形字符串)—java
题目描述:The string"PAYPALISHIRING"is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H NA P L S I I...原创 2018-06-05 16:13:05 · 388 阅读 · 0 评论 -
LeetCode—add-two-numbers(累加两个链表的数字)—java
题目描述:You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a...原创 2018-06-05 11:30:50 · 230 阅读 · 0 评论 -
LeetCode—longest-substring-without-repeating-characters(最长不重复子串)—java
题目描述:Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3....原创 2018-06-05 10:35:32 · 173 阅读 · 0 评论 -
LeetCode—median-of-two-sorted-arrays(两个有序数组的中位数)—java
题目描述:There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).思路解析:首先假设数组A和B的元素个数都大于k/2,我们比较A[...原创 2018-06-05 00:06:41 · 248 阅读 · 0 评论 -
LeetCode—Single-number-ii(重复三次的找到single number,版本2)—java
题目描述:Given an array of integers, every element appears threetimes except for one. Find that single one.Note: Your algorithm should have a linear runtime complexity. Could you implement it without usin...原创 2018-06-04 11:43:15 · 490 阅读 · 0 评论 -
LeetCode—single-number(只有一个数字是单个的,其他的数字都是重复的)—java
题目描述:Given an array of integers, every element appears twiceexcept for one. Find that single one.Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extr...原创 2018-06-04 11:29:56 · 249 阅读 · 0 评论 -
LeetCode—Candy(分糖果)—java
题目描述:There are N children standing in a line. Each child is assigned a rating value.You are giving candies to these children subjected to the following requirements:Each child must have at least one c...原创 2018-06-04 11:24:20 · 889 阅读 · 0 评论 -
LeetCode—gas-station(加油站)—java
题目描述:There are N gas stations along a circular route, where the amount of gas at station i isgas[i].You have a car with an unlimited gas tank and it costscost[i]of gas to travel from station i to its ...原创 2018-06-04 11:12:16 · 733 阅读 · 0 评论 -
LeetCode—convert-sorted-list-to-binary-search-tree(有序链表转换成二叉搜索树)—Java
题目描述:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.思路解析:自顶向下建树:先用快慢指针找到链表的中间节点,然后把它设置为树的根节点。在找的过程中,注意的是把中间节点的前一个节点也找到,这样就可以断开前后了。然后递归左链表,...原创 2018-06-04 11:04:39 · 404 阅读 · 0 评论 -
LeetCode—insertion-sort-list(插入排序排列链表)—Java
题目描述:Sort a linked list using insertion sort.使用插入排序排列链表思路解析:新建一个链表头,cur表示当前需要排序的节点,pre表示已经排好序的节点每次插入排序之前先保存cur.next节点注意将cur插入pre后边时,需要先将cur的next指向pre的next,然后再将pre的next指向cur代码:/** * Definition for sin...原创 2018-05-20 17:08:00 · 155 阅读 · 0 评论 -
LettCode—sort-list(将链表排序)—Java
题目描述:Sort a linked list in O(n log n) time using constant space complexity.对链表进行归并排序思路解析:归并排序的思想:比较大小,把小的先进行排序,剩下的再直接放入。找到链表中间点的方法,也就是分为两个list:firstlist和secondlist递归分解两个list,然后MergeMerge的过程需要新建节点:List...原创 2018-05-20 15:49:37 · 217 阅读 · 0 评论 -
LeetCode—max-points-on-a-line(共线点的最大数量)—Java
题目描述:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.求二维平面上n个点中,最多共线的点数。思路解析:遍历两层循环:第一层循环代表起始点,第二层循环代表第二个点,两点定线特殊情况:点为空,长度为0,return 0只有两个点,return 2外层...原创 2018-05-20 14:44:44 · 1486 阅读 · 2 评论 -
剑指offer-从上到下打印二叉树-java
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路解析:二叉树的层序遍历,需要队列的辅助,因为是先进先出;出来一个就把他的左子节点和右子节点加入队列;可以使用poll();注意:需要将二叉树的value添加进队列中。代码:import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;...原创 2018-04-12 11:39:22 · 191 阅读 · 0 评论 -
剑指offer-二叉树的镜像-java
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思路解析:交换根节点的左...原创 2018-04-12 11:03:05 · 177 阅读 · 0 评论 -
剑指offer-树的子结构-java
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路解析:找到相等的节点:比较A和B的根节点是否相等,若相等,就查看是不是子树;不相等的话,就接着比较左孩子和右孩子是不是跟子结构的root相等(递归)是不是子树的递归:结束条件是root2为空了,比较完毕,则为子树;root1比较完毕,不是子树;后边的值不相等,不是子树;相等的话就接着比较各自的左...原创 2018-04-12 10:36:47 · 215 阅读 · 0 评论