随笔分类 -  剑指offer

摘要:翻转单词顺序 题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。 题目思路 首先去除句子中两边的空格 在末尾定义i,j索引 i向前扫描直到找到 阅读全文
posted @ 2020-08-15 13:15 杨小星儿 阅读(117) 评论(0) 推荐(0)
摘要:最小的K个数 题目描述: 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 题目思路: 一、冒泡排序 排序方法太多了,从小到大排序,然后取前K个值。 public int[] getLeastNumbers(in 阅读全文
posted @ 2020-08-13 22:30 杨小星儿 阅读(99) 评论(0) 推荐(0)
摘要:调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 题目思路 一、头尾交换 指定一个头结点和尾结点。 当头结点不等于尾结点,执行以下顺序 判断头节点的数字是不是偶数,如果是偶数那么和尾结点交换 阅读全文
posted @ 2020-08-08 15:15 杨小星儿 阅读(105) 评论(0) 推荐(0)
摘要:题目描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 题目思路 判断删除节点的值和头结点相等吗,如果是那么返回头结点的下一个节点。 遍历链表找到删除节点的位置。 删除节点 public ListNode deleteNode(ListNode h 阅读全文
posted @ 2020-08-05 13:43 杨小星儿 阅读(171) 评论(1) 推荐(0)
摘要:旋转数组的最小数字 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 题目思路: 一、遍历 标记第一个元素为res 阅读全文
posted @ 2020-08-03 13:52 杨小星儿 阅读(105) 评论(0) 推荐(0)
摘要:重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 题目思路: 一、递归 前序遍历第一个是根节点。 根据根节点可以在中序遍历中找到该节点的位置 中序遍历根节点位置左边的所有节点都是左子树的节点,右边的节点都是右子树的 阅读全文
posted @ 2020-08-01 12:36 杨小星儿 阅读(104) 评论(0) 推荐(0)
摘要:此题与斐波那契数列相同。 详情移步至 斐波那契数列 阅读全文
posted @ 2020-07-29 23:39 杨小星儿 阅读(66) 评论(0) 推荐(0)
摘要:题目描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16 阅读全文
posted @ 2020-07-28 21:21 杨小星儿 阅读(113) 评论(0) 推荐(0)
摘要:题目描述: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得 阅读全文
posted @ 2020-07-26 22:26 杨小星儿 阅读(111) 评论(0) 推荐(0)
摘要:剑指offer003 数组中的重复数字 题目描述: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 解法: 一、Map 把数组遍历到map当发现已经包含数值时退 阅读全文
posted @ 2020-07-25 11:50 杨小星儿 阅读(102) 评论(0) 推荐(0)
摘要:二叉树的最近公共祖先 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 题目思路: 递归解 阅读全文
posted @ 2020-05-17 11:03 杨小星儿 阅读(103) 评论(0) 推荐(0)
摘要:二叉搜索树的最近公共祖先 题目描述: 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 题目思路: 阅读全文
posted @ 2020-05-16 22:05 杨小星儿 阅读(112) 评论(0) 推荐(0)
摘要:和为S的连续正数序列 题目描述: 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 题目思路: 定义一个左边界,一个右边界,左闭右开,形成一个滑动窗口。 当窗口内的数值和小于目标值的时候,右 阅读全文
posted @ 2020-05-14 23:16 杨小星儿 阅读(103) 评论(0) 推荐(0)
摘要:层序从上到下打印二叉树 题目描述: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 题目思路: 如果根节点为空,那么返回一个空列表[] 如果不为空,把根节点加入到队列中 队列为空的时候跳出循环,否则进行下面的操作 创建一个列表 遍历队列里的元素,将其加入列表 判断当前加 阅读全文
posted @ 2020-04-27 14:15 杨小星儿 阅读(140) 评论(0) 推荐(0)
摘要:复杂链表的复制 题目描述: 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null. 题目思路: 用一个Map保存节点和这个节点的复制。 遍历链表,按照顺讯将复制节点 阅读全文
posted @ 2020-04-26 12:26 杨小星儿 阅读(108) 评论(0) 推荐(0)
摘要:用两个栈实现队列 题目描述: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 题目代码: class solution{ S 阅读全文
posted @ 2020-04-25 22:41 杨小星儿 阅读(75) 评论(0) 推荐(0)
摘要:#二进制中1的个数 题目描述: 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 题目思路: 当1&0,0&1,0&0都等于0 只有1&1才为1 所以我们可以循环判断输入整数与1相与的结果 阅读全文
posted @ 2020-04-23 21:54 杨小星儿 阅读(128) 评论(0) 推荐(0)
摘要:二叉树最大深度 思路: 题解: //递归 public class Offer55 { public int maxDepth(TreeNode root) { if(root == null) return 0; int leftDep = maxDepth(root.left); int rig 阅读全文
posted @ 2020-04-21 20:13 杨小星儿 阅读(93) 评论(0) 推荐(0)
摘要:合并链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路: 遍历判断: 创建一个伪头结点node,创建一个cur指向头结点。循环遍历结束条件为两个链表其中有一个为空。 阅读全文
posted @ 2020-04-20 09:21 杨小星儿 阅读(95) 评论(0) 推荐(0)
摘要:左旋字符串 题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 1: 输入: s = “abcdefg”, k = 2 输出: “cd 阅读全文
posted @ 2020-04-19 13:37 杨小星儿 阅读(95) 评论(0) 推荐(0)