文章分类 -  剑指offer

摘要:题目 对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先) 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] "LeetCode" C++ 题解 根据 阅读全文
posted @ 2019-04-03 13:47 youngliu91 阅读(127) 评论(0) 推荐(0) 编辑
摘要:题目 对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。 给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] "LeetCode" C++ 题解 递归思想, 阅读全文
posted @ 2019-03-17 23:12 youngliu91 阅读(218) 评论(0) 推荐(0) 编辑
摘要:题目 给定一个数组 A[0,1,...,n−1A[0,1,...,n−1],请构建一个数组 B[0,1,...,n−1]B[0,1,...,n−1]。 其中 B 中的元素 B[i]=A[0] x A[1] x ... x A[i−1] x A[i+1] x ... x A[n−1]。不能使用除法。 阅读全文
posted @ 2019-03-17 22:14 youngliu91 阅读(94) 评论(0) 推荐(0) 编辑
摘要:题目 写一个函数,求两个正数之和,要求在函数体内不能使用四则运算符号。 "牛客网 OJ" C++ 题解 两个数异或:相当于每一位相加,而不考虑进位; 两个数相与,并左移一位:相当于求得进位; 将上述两步的结果相加 1. 两数进行异或: 0011^0101=0110 这个数字其实是把原数中不需进位的二 阅读全文
posted @ 2019-03-17 21:59 youngliu91 阅读(197) 评论(0) 推荐(0) 编辑
摘要:题目 求1+2+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键词及条件判断语句(?:)。 C++ 题解 这里使用了运算符&&的短路特性。 python 题解 阅读全文
posted @ 2019-03-17 21:52 youngliu91 阅读(96) 评论(0) 推荐(0) 编辑
摘要:题目 求买卖股票一次能获得的最大利润。例如,输入{9,11,8,5,7,12,16,14},5的时候买入,16的时候卖出,则能获得最大利润11。 "AcWing OJ" C 语言题解 遍历过程中记录最小值min,然后计算当前值与min的差值diff,并更新maxDiff。 C++ 题解 python 阅读全文
posted @ 2019-03-17 21:25 youngliu91 阅读(132) 评论(0) 推荐(0) 编辑
摘要:题目 0,1,2...n 1这n个数字拍成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字,求剩下的最后一个数字。 例如0,1,2,3,4这5个数字组成的圈,每次删除第3个数字,一次删除2,0,4,1,因此最后剩下的是3。 "AcWing OJ" C++ 题解 解法一 经典的解法, 用环形链表 阅读全文
posted @ 2019-03-17 21:08 youngliu91 阅读(95) 评论(0) 推荐(0) 编辑
摘要:题目 抽取5张牌,判断是不是一个顺子。2 10为数字本身,A为1,J为11,Q为12,K为13,大小王可堪称任意数字。 "" "" C++ 题解 把5张牌看成一个数组,就看排序后的数组是不是连续的,大小王看成特殊的数字,例如定义为0,与其他数字区分开,0的作用就是补充其他数字间不连续的空缺。 步骤: 阅读全文
posted @ 2019-03-17 20:32 youngliu91 阅读(133) 评论(0) 推荐(0) 编辑
摘要:问题 题目 把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值的出现概率。 思路 题解 测试 阅读全文
posted @ 2019-03-17 20:30 youngliu91 阅读(126) 评论(0) 推荐(0) 编辑
摘要:题目 定义一个队列并实现函数max得到队列里的最大值。要求max,pushBack,popFront的时间复杂度都是o(1)。 C++ 题解 同上一题相同,我们要寻找队列的最大值,相当于将滑动窗口设置为整个队列。 这里需要使用两个队列,一个队列用来保存入队的数据,一个队列用来保存队列的当前最大值。 阅读全文
posted @ 2019-03-17 18:14 youngliu91 阅读(180) 评论(0) 推荐(0) 编辑
摘要:题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口的最大值。例如,输入数组{2,3,4,2,6,2,5,1}和数字3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}。 "牛客网 OJ" "AcWing OJ" C++题解 借助 双向队列 ,对于新来的元素k,将其与队列中元 阅读全文
posted @ 2019-03-17 17:33 youngliu91 阅读(217) 评论(0) 推荐(0) 编辑
摘要:题目 输入一个整数s,打印所有和为s的连续正数序列(至少两个)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出三个连续序列1~5,4~6,7~8。 "牛客网 OJ" "AcWing OJ" C++ 题解 这里也考虑两个数small和big分别表示序列的最小值和最大值。 阅读全文
posted @ 2019-03-17 15:10 youngliu91 阅读(88) 评论(0) 推荐(0) 编辑
摘要:题目 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使它们的和为s。如果有多对和为s,输入任意一对即可。 "牛客网 OJ" "AcWing OJ" C 语言题解 数列满足递增,设两个头尾两个指针i和j, 若ai + aj == sum,就是答案 若ai + aj sum,aj肯定不是答案之 阅读全文
posted @ 2019-03-17 14:57 youngliu91 阅读(140) 评论(0) 推荐(0) 编辑
摘要:题目 在一个数组中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 "LeetCode" C++ 题解 如果题目中的“三次”换成“两次”,这道题目将非常简单,因此两个相同的数字异或,每一位都会变成0,其实亦或也可以看成两个数字的每一个二进制位对应进行加法后对2取模后的结果 阅读全文
posted @ 2019-03-17 14:22 youngliu91 阅读(301) 评论(0) 推荐(0) 编辑
摘要:题目 一个整数数组里除了两个数字出现一次,其他数字都出现两次。请找出这两个数字。要求时间复杂度为o(n),空间复杂度为o(1)。 "LeetCode" C++ 题解 两个相同的数字异或等于0。 如果数组中只有一个数字只出现一次,我们从头到尾异或每个数字,那么最终的结果刚好是那个只出现一次的数字。 而 阅读全文
posted @ 2019-03-17 13:54 youngliu91 阅读(116) 评论(0) 推荐(0) 编辑
摘要:题目 输入一课二叉树的根结点,判断该树是不是平衡二叉树。如果二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 "LeetCode" C++ 题解 采用递归的方法: python 题解 阅读全文
posted @ 2019-03-17 13:42 youngliu91 阅读(141) 评论(0) 推荐(0) 编辑
摘要:题目 找出二叉搜索树的第k大节点。例如,在下图的树里,第3大节点的值为4,输入该树的根节点,3,则输出4。 "Leetcode" C++ 题解 方法一 查找左子树的数量: 方法二 利用栈实现: python 题解 中序遍历将节点存放在列表中: Definition for a binary tree 阅读全文
posted @ 2019-03-17 11:12 youngliu91 阅读(148) 评论(0) 推荐(0) 编辑
摘要:题目 假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数,找出数组中任意一个数值等于其下标的元素。例如,在数组{ 3, 1,1,3,5}中,数字3和它的下标相等。 "AcWing OJ" C 语言题解 由于数组是单调递增排序的,因此我们可以尝试二分查找算法来进行优化。假设我们 阅读全文
posted @ 2019-03-17 09:26 youngliu91 阅读(266) 评论(0) 推荐(0) 编辑
摘要:题目 一个长度为n 1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n 1之内。在范围0到n 1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 "AcWing OJ" C语言题解 若数组没有缺失,则每个数字和它的下标都相等。然而,现在数组有缺失,说明从缺失的那个数开始,后 阅读全文
posted @ 2019-03-17 09:16 youngliu91 阅读(206) 评论(0) 推荐(0) 编辑
摘要:题目 统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。 "牛客网 OJ" "AcWing OJ" C 语言题解 二分查找,找到第一次出现的位置以及最后出现的位置: int GetFirstK(const int 阅读全文
posted @ 2019-03-17 09:12 youngliu91 阅读(103) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示