07 2020 档案

摘要:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 双指针,简单题。 1 class Sol 阅读全文
posted @ 2020-07-30 18:16 __rookie 阅读(66) 评论(0) 推荐(0) 编辑
摘要:给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 找到中间0,然后双指针分别指向第一个正数和最后一个负数,每次比较两个数的绝对值,压入小者的平方。 需要注意在根据nums[pos]判断来增加pos的时候,一定要先判断pos是否在范围内。 1 class 阅读全文
posted @ 2020-07-30 18:11 __rookie 阅读(154) 评论(0) 推荐(0) 编辑
摘要:给定一棵二叉搜索树,请找出其中第k大的节点。 一开始没注意到是搜索树,用set的自动排序特定得出结果,时间复杂度应该是O(nlogn),总共n个节点,每次插入删除需要logn时间。 1 /** 2 * Definition for a binary tree node. 3 * struct Tre 阅读全文
posted @ 2020-07-30 15:27 __rookie 阅读(123) 评论(0) 推荐(0) 编辑
摘要:在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。 做广度优先搜索,先遍历记录下 阅读全文
posted @ 2020-07-29 22:29 __rookie 阅读(192) 评论(0) 推荐(0) 编辑
摘要:给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 可以 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 阅读全文
posted @ 2020-07-29 22:02 __rookie 阅读(147) 评论(0) 推荐(0) 编辑
摘要:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 直接用快速排序的partition函数,可以在O(n)时间内解决。或者使用最大堆,时间复杂度为O(nlogn)。 1 class Solution { 2 public: 3 阅读全文
posted @ 2020-07-29 21:48 __rookie 阅读(122) 评论(0) 推荐(0) 编辑
摘要:根据一棵树的前序遍历与中序遍历构造二叉树。 递归,根据前序遍历当前有效区域第一个,即为当前根节点;找到中序遍历中它的位置,左侧为左节点,右侧为右节点。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int 阅读全文
posted @ 2020-07-28 22:35 __rookie 阅读(135) 评论(0) 推荐(0) 编辑
摘要:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。 先除去0,然后再判断中间缺了多少个数,和0的数量比较就可以了。注意判断是否有相同的数。 1 class Solut 阅读全文
posted @ 2020-07-28 22:18 __rookie 阅读(126) 评论(0) 推荐(0) 编辑
摘要:给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 快慢指针,一个走两步一个走一步,迟早相遇。注意判断长度为0或1的情况。 1 /** 2 * Definition fo 阅读全文
posted @ 2020-07-28 21:13 __rookie 阅读(66) 评论(0) 推荐(0) 编辑
摘要:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 其实就是一个栈,对于奇数层先压入左子树,对于偶数层先压入右子树。但是每一层需要先把所有节点都取出来才能开始循环。 1 /** 2 * Definition for a binar 阅读全文
posted @ 2020-07-27 23:42 __rookie 阅读(98) 评论(0) 推荐(0) 编辑
摘要:斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。 动态规划,注意是从0开 阅读全文
posted @ 2020-07-27 23:29 __rookie 阅读(99) 评论(0) 推荐(0) 编辑
摘要:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 按层模拟,设置四个标志,每次循环++left,--right,--down,++up。需要注意的是,每次循环按四个方向输出,但是要注意只有一行或者一列的情况,要进行判断和跳出。 1 class Solution { 2 public: 阅读全文
posted @ 2020-07-27 23:24 __rookie 阅读(95) 评论(0) 推荐(0) 编辑
摘要:https://www.cnblogs.com/vinozly/p/5489138.html 阅读全文
posted @ 2020-07-27 15:47 __rookie 阅读(338) 评论(0) 推荐(0) 编辑
摘要:https://guodong.plus/2020/0307-190855/ 阅读全文
posted @ 2020-07-27 15:35 __rookie 阅读(53) 评论(0) 推荐(0) 编辑
摘要:https://blog.csdn.net/daaikuaichuan/article/details/83862311 阅读全文
posted @ 2020-07-27 10:43 __rookie 阅读(48) 评论(0) 推荐(0) 编辑
摘要:https://blog.csdn.net/wk_bjut_edu_cn/article/details/81156181 阅读全文
posted @ 2020-07-27 10:01 __rookie 阅读(45) 评论(0) 推荐(0) 编辑
摘要:https://www.cnblogs.com/wuchanming/p/4161774.html 阅读全文
posted @ 2020-07-27 09:35 __rookie 阅读(58) 评论(0) 推荐(0) 编辑
摘要:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 https://leetcode-cn.com/problems/med 阅读全文
posted @ 2020-07-26 21:52 __rookie 阅读(113) 评论(0) 推荐(0) 编辑
摘要:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 一样的动态规划,但是多了障碍物,其实只用 阅读全文
posted @ 2020-07-26 19:37 __rookie 阅读(85) 评论(0) 推荐(0) 编辑
摘要:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 进阶: 如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。 逆序处理首先应该想到栈,而不 阅读全文
posted @ 2020-07-25 12:49 __rookie 阅读(109) 评论(0) 推荐(0) 编辑
摘要:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 第一种方法,连续对链表做两两合并,时间复杂度和空间复杂度如下: 第二种方法,归并法,每次合并相邻的两个链表 第三种方法,优先队列。先把k个链表头压入,然后每次取出val最小的指针,然后压入下一个。 1 /** 2 * Defin 阅读全文
posted @ 2020-07-25 11:17 __rookie 阅读(93) 评论(0) 推荐(0) 编辑
摘要:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 二叉搜索树左子树小于根节点,右子树大于根节点,而后序遍历结果中根节点一定是最后一个。所以从左侧开始搜索,找到第一个大于根节点的值,前面的就是左子树。然 阅读全文
posted @ 2020-07-25 10:51 __rookie 阅读(112) 评论(0) 推荐(0) 编辑
摘要:给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。 返回移除了所有不包含 1 的子树的原二叉树。 ( 节点 X 的子树为 X 本身,以及所有 X 的后代。) 非常简单一个递归就可以解决,但是要注意两点:一是一定要检查完两个子树和本身之后再返回,不要出现检查完左子树为true就 阅读全文
posted @ 2020-07-24 20:37 __rookie 阅读(98) 评论(0) 推荐(0) 编辑
摘要:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 基础的二分查找,唯一需要注意的就是移位运算的优先级很低,需要加括号。 1 class Solution { 2 public: 阅读全文
posted @ 2020-07-24 20:09 __rookie 阅读(83) 评论(0) 推荐(0) 编辑
摘要:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 第一种方法,置换,把每个x放到x-1的位置上(减一是因为这里是说正整数,如果不减一会没法处理到0号位置的数)。这样做完之后重新遍历,第一个不等于位置x+1的数就是答案。 1 class Solution { 2 public: 3 in 阅读全文
posted @ 2020-07-24 17:57 __rookie 阅读(165) 评论(0) 推荐(0) 编辑
摘要:给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 可以遍历然后存起来,然后空间换时间。 也可以递归,但是递归的方法需要巧妙一点。 这里借用windliang的解法 阅读全文
posted @ 2020-07-23 22:33 __rookie 阅读(184) 评论(0) 推荐(0) 编辑
摘要:编写一个程序,找到两个单链表相交的起始节点。 先遍历一遍两个链表,记录长度,然后将长的那一侧先移动,移动到两个链表剩下的长度相同,然后同步移动两个指针,直到相遇或结束。 注意diff正负的问题,不要diff--导致longer往后移动到null。 1 /** 2 * Definition for s 阅读全文
posted @ 2020-07-22 16:43 __rookie 阅读(154) 评论(0) 推荐(0) 编辑
摘要:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2]输出:1示例 2: 输入:[2,2,2 阅读全文
posted @ 2020-07-22 16:18 __rookie 阅读(127) 评论(0) 推荐(0) 编辑
摘要:给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 对于每一个节点,计算一个以该节点为根节点,且经过该节点的子树中的最大价值路径,记为maxgain。maxgain等于该节点的值加上左子树的maxgai 阅读全文
posted @ 2020-07-22 15:28 __rookie 阅读(184) 评论(0) 推荐(0) 编辑
摘要:给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 递归判断就可以了。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 阅读全文
posted @ 2020-07-21 16:52 __rookie 阅读(95) 评论(0) 推荐(0) 编辑
摘要:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 递归: 递归到尾节点,然后往回;每次都是返回尾结点。对于每个递归栈的head,将head->next->next设置为 阅读全文
posted @ 2020-07-21 16:40 __rookie 阅读(118) 评论(0) 推荐(0) 编辑
摘要:请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get 和 put。 get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该 阅读全文
posted @ 2020-07-21 16:14 __rookie 阅读(131) 评论(0) 推荐(0) 编辑
摘要:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 这个题找规律不难,只用判断一下长度为1和长度为2的特殊情况就可以了。 注意==运算符的优先级高于&运算符。 1 /** 2 * Definition for singly-linked li 阅读全文
posted @ 2020-07-20 15:26 __rookie 阅读(109) 评论(0) 推荐(0) 编辑
摘要:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 一个指针指向最左侧的零,一个int记录已经遇到的0的长度;如果下一个是0,就直接把长度+1;如果不是,就交换最左侧的零和nums[i],然后l 阅读全文
posted @ 2020-07-20 15:24 __rookie 阅读(131) 评论(0) 推荐(0) 编辑
摘要:https://www.cnblogs.com/Braveliu/p/7372714.html 写的非常好 阅读全文
posted @ 2020-07-19 23:31 __rookie 阅读(72) 评论(0) 推荐(0) 编辑
摘要:段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母。 举个例子,对于一般回文 "abcba" 是回文,而 "volvo" 不是,但如果我们把 "volvo" 分为 "vo"、"l"、"vo" 三段,则可以认为 “(vo)(l)(vo)” 是段式回文(分为 3 段)。 阅读全文
posted @ 2020-07-19 20:22 __rookie 阅读(264) 评论(0) 推荐(0) 编辑
摘要:给定一个二叉树,检查它是否是镜像对称的。 先创建一个镜像的二叉树,即交换二叉树的左右子树,然后比较二叉树的异同即可。 注意判断异同的时候origin和new都可能单独为nullptr,不要漏掉情况 1 /** 2 * Definition for a binary tree node. 3 * st 阅读全文
posted @ 2020-07-19 18:20 __rookie 阅读(141) 评论(0) 推荐(0) 编辑
摘要:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 用最小堆解决。先用map记录每个元素的出现次数,然后循环往最小堆中压入,如果堆中节点数量大于k了就弹出堆顶。 1 class Solution { 2 public: 3 vector<int> topKFrequent(vector<in 阅读全文
posted @ 2020-07-18 10:48 __rookie 阅读(191) 评论(0) 推荐(0) 编辑
摘要:输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 很简单的一道题, 但是犯了不少错误,主要在于ret和curmax的初值。每一步都要和ret比较一下。 1 class Solution { 2 public: 3 阅读全文
posted @ 2020-07-18 09:48 __rookie 阅读(125) 评论(0) 推荐(0) 编辑
摘要:给定一个二叉树,确定它是否是一个完全二叉树。 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。) 自己用的是本方法,先 阅读全文
posted @ 2020-07-17 22:41 __rookie 阅读(150) 评论(0) 推荐(0) 编辑
摘要:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k 阅读全文
posted @ 2020-07-16 23:12 __rookie 阅读(137) 评论(0) 推荐(0) 编辑
摘要:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 递归就可以,但还是要注意一个是不能地轨道 阅读全文
posted @ 2020-07-15 16:27 __rookie 阅读(152) 评论(0) 推荐(0) 编辑
摘要:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 < / \2 3 < \ \ 5 4 < 可以选择bfs或者dfs。这里用bfs,用queue实现 1 /** 阅读全文
posted @ 2020-07-15 15:48 __rookie 阅读(129) 评论(0) 推荐(0) 编辑
摘要:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 注意: num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。 阅读全文
posted @ 2020-07-14 23:38 __rookie 阅读(151) 评论(0) 推荐(0) 编辑
摘要:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) 阅读全文
posted @ 2020-07-14 22:29 __rookie 阅读(153) 评论(0) 推荐(0) 编辑
摘要:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 没什么好说的,一个队列解决。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * Tree 阅读全文
posted @ 2020-07-13 22:08 __rookie 阅读(127) 评论(0) 推荐(0) 编辑
摘要:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 可以把问题分解成n-1个和1个骰子,加上这个骰子后,对于可能出现的点数x。他的值等于(x- 阅读全文
posted @ 2020-07-07 11:52 __rookie 阅读(162) 评论(0) 推荐(0) 编辑
摘要:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 阅读全文
posted @ 2020-07-07 10:52 __rookie 阅读(156) 评论(0) 推荐(0) 编辑
摘要:在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 这道题和上一题很相似,但是因为出现三次,没法使用异或,但是仍然可以使用位运算。 出现三次的数,他们每一位单独加起来肯定可以被三整除,那么我们只要把所有数的位都加起来,不能被三整除的位合起来就是出现了 阅读全文
posted @ 2020-07-06 23:44 __rookie 阅读(131) 评论(0) 推荐(0) 编辑
摘要:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2: 输入:nums = [1,2,10,4,1,4,3,3] 阅读全文
posted @ 2020-07-06 23:31 __rookie 阅读(110) 评论(0) 推荐(0) 编辑
摘要:输入两个链表,找出它们的第一个公共节点。 普通办法,对A链表每个节点都遍历B链表,看有没有相同,时间复杂度mn。 用空间换时间,因为链表只要遇到第一个相同的节点,后面的节点都相同,也就是说可以从链表尾往回找。但是因为缺乏往回的指针,所以使用栈,两个栈分别把两个链表的所有节点压进去,然后再一对一对弹出 阅读全文
posted @ 2020-07-06 09:42 __rookie 阅读(153) 评论(0) 推荐(0) 编辑
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4]输出: 5 这个题基础做法是遍历,然后对于每个数,往后找是不是有数小于他,这样是两层循环,O(n^2)。 但是可以用时间换空间。一个数组 阅读全文
posted @ 2020-07-06 09:11 __rookie 阅读(145) 评论(0) 推荐(0) 编辑
摘要:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 示例: 输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明: 1 是丑数。n 不超过1690。 普通方法是从1 阅读全文
posted @ 2020-07-05 20:16 __rookie 阅读(157) 评论(0) 推荐(0) 编辑
摘要:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1 阅读全文
posted @ 2020-07-05 19:41 __rookie 阅读(130) 评论(0) 推荐(0) 编辑
摘要:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 1: 输入: 12258输出: 5解释: 12258有5种不同 阅读全文
posted @ 2020-07-05 13:24 __rookie 阅读(170) 评论(0) 推荐(0) 编辑
摘要:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持 阅读全文
posted @ 2020-07-05 09:58 __rookie 阅读(153) 评论(0) 推荐(0) 编辑
摘要:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2 这题本质是求数组中第k小的数。因为如果一个数出现次数超过一半,那么排序后数组的中位数肯定是它 阅读全文
posted @ 2020-07-04 21:05 __rookie 阅读(136) 评论(0) 推荐(0) 编辑
摘要:https://blog.csdn.net/magic_world_wow/article/details/80500473 阅读全文
posted @ 2020-07-04 20:32 __rookie 阅读(78) 评论(0) 推荐(0) 编辑
摘要:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节 阅读全文
posted @ 2020-07-04 16:52 __rookie 阅读(211) 评论(0) 推荐(0) 编辑
摘要:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 这题首先思路就比较复杂。 如果直接复制好基础链表,再复制random指针,就需要O(n^2)的时间,比较慢。 阅读全文
posted @ 2020-07-04 15:56 __rookie 阅读(136) 评论(0) 推荐(0) 编辑
摘要:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回: [ [5,4,11,2], 阅读全文
posted @ 2020-07-04 15:02 __rookie 阅读(138) 评论(0) 推荐(0) 编辑
摘要:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果: [ [3], [2 阅读全文
posted @ 2020-07-04 12:33 __rookie 阅读(90) 评论(0) 推荐(0) 编辑
摘要:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回: [3,9,20,15,7] 因为是要从上到下,所以要求先进先出,先压入的一层就要先输出,所以采用队列。 从第一层开 阅读全文
posted @ 2020-07-04 12:06 __rookie 阅读(107) 评论(0) 推荐(0) 编辑
摘要:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1 阅读全文
posted @ 2020-07-04 11:40 __rookie 阅读(97) 评论(0) 推荐(0) 编辑
摘要:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);m 阅读全文
posted @ 2020-07-04 09:47 __rookie 阅读(101) 评论(0) 推荐(0) 编辑
摘要:p160 解法很机智,留作以后忘记后思考。 阅读全文
posted @ 2020-07-04 09:27 __rookie 阅读(73) 评论(0) 推荐(0) 编辑
摘要:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1 示例 1: 输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] 关键在于发现二叉树的镜像 阅读全文
posted @ 2020-07-04 09:20 __rookie 阅读(91) 评论(0) 推荐(0) 编辑
摘要:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1 阅读全文
posted @ 2020-07-04 08:58 __rookie 阅读(117) 评论(0) 推荐(0) 编辑
摘要:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 没有什么聪明的办法,关键在于保证链表不要断开,同时处理链表只有一个头或者直接为空 阅读全文
posted @ 2020-07-03 23:38 __rookie 阅读(123) 评论(0) 推荐(0) 编辑
摘要:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 示例: 给定一个链表: 1->2->3->4->5, 和 k = 阅读全文
posted @ 2020-07-03 23:07 __rookie 阅读(111) 评论(0) 推荐(0) 编辑
摘要:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 示例: 输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 提示: 1 <= nums.length <= 500001 < 阅读全文
posted @ 2020-07-03 22:45 __rookie 阅读(118) 评论(0) 推荐(0) 编辑
摘要:不多赘述,可以看书本。 最重要的是可以通过比较两个指针的值(即他们的地址),判断其中一个指针有没有向前移动。 1 /******************************************************************* 2 Copyright(c) 2016, Har 阅读全文
posted @ 2020-07-03 20:34 __rookie 阅读(169) 评论(0) 推荐(0) 编辑
摘要:请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。 示例 阅读全文
posted @ 2020-07-03 17:22 __rookie 阅读(147) 评论(0) 推荐(0) 编辑
摘要:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 示例 1: 输入: 2.00000, 10输出: 1024.00000示例 2: 输入: 2.10000, 3输出: 9.26100示例 阅读全文
posted @ 2020-07-03 11:15 __rookie 阅读(182) 评论(0) 推荐(0) 编辑
摘要:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入:["CQueue","appendTail","delet 阅读全文
posted @ 2020-07-02 16:57 __rookie 阅读(114) 评论(0) 推荐(0) 编辑
摘要:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7 前 阅读全文
posted @ 2020-07-02 11:34 __rookie 阅读(122) 评论(0) 推荐(0) 编辑
摘要:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19] 阅读全文
posted @ 2020-07-01 22:32 __rookie 阅读(107) 评论(0) 推荐(0) 编辑
摘要:找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制: 2 阅读全文
posted @ 2020-07-01 21:49 __rookie 阅读(180) 评论(0) 推荐(0) 编辑
摘要:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的 阅读全文
posted @ 2020-07-01 12:07 __rookie 阅读(125) 评论(0) 推荐(0) 编辑
摘要:给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board =[ ['A','B','C','E'], ['S','F','C','S'] 阅读全文
posted @ 2020-07-01 11:29 __rookie 阅读(105) 评论(0) 推荐(0) 编辑