![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣刷题
DY老王
这个作者很懒,什么都没留下…
展开
-
[剑指offer] 不用加减乘除做加法(C++解法)
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数位运算思路:将加法拆分为 (无进位加法 + 进位值)例如:123 + 789 = 802 + 110 = 912。其中802为无进位加法得来的结果(3 + 9 = 12,去...原创 2020-03-30 22:40:55 · 121 阅读 · 0 评论 -
[剑指offer] 圆圈中最后剩下的数字(C++解法)
0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制:1...原创 2020-03-27 22:59:58 · 280 阅读 · 0 评论 -
[剑指offer] 对称的二叉树(C++解法)
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例...原创 2020-03-26 22:33:42 · 95 阅读 · 0 评论 -
[剑指offer] 平衡二叉树(C++解法)
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 ...原创 2020-03-23 18:04:28 · 129 阅读 · 0 评论 -
[剑指offer] 连续子数组的最大和(C++解法)
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] &...原创 2020-03-23 17:11:34 · 316 阅读 · 0 评论 -
[剑指offer] 第一个只出现一次的字符(C++解法)
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。示例:s = "abaccdeff"返回 "b"s = "" 返回 " "限制:0 <= s 的长度 <= 50000哈希法思路:因为C++没有可以按照插入的先后排序的哈希容器,所以就自己利用vector + pair设计了一个简单的顺序map, 其中键为char型,值为int型;首先顺序遍历...原创 2020-03-22 15:37:37 · 489 阅读 · 0 评论 -
[剑指offer] 构建乘积数组(C++解法)
给定一个数组 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]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000对称遍历法思路:由B[...原创 2020-03-22 12:41:51 · 143 阅读 · 0 评论 -
[剑指offer]包含min函数的栈(C++解法)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -...原创 2020-03-21 22:09:23 · 142 阅读 · 0 评论 -
[剑指offer] 最小的k个数(C++解法)
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 10000...原创 2020-03-21 21:04:50 · 371 阅读 · 0 评论 -
[剑指offer] 两个链表的第一个公共节点(C++解法)
输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两...原创 2020-03-21 19:31:43 · 205 阅读 · 0 评论 -
[剑指offer] 和为s的两个数字(C++解法)
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 ...原创 2020-03-21 15:17:18 · 142 阅读 · 0 评论 -
[剑指offer] 二叉树的最近公共祖先 (C++解法)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1...原创 2020-03-21 14:31:44 · 590 阅读 · 0 评论 -
[剑指offer] 数组中出现次数超过一半的数字 (C++解法)
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000C++解法思路:因为出现次数大于数组长度的一半,则两两相邻的数若不相同,则可以一起抵消,最后剩下的数就是目标值。初始化一个计数...原创 2020-03-20 23:52:48 · 405 阅读 · 0 评论 -
[剑指offer] 二叉搜索树的最近公共祖先 (C++ 解法)
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6...原创 2020-03-20 22:48:47 · 171 阅读 · 0 评论 -
[剑指offer] 和为s的连续正数序列 (C++解法)
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10...原创 2020-03-20 01:12:40 · 235 阅读 · 0 评论 -
[剑指offfer] 从上到下打印二叉树 II (C++解法)
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]提示:节点总数 <= 1000C++解法思路:使用队列层次遍历访问二叉树...原创 2020-03-19 21:36:55 · 98 阅读 · 0 评论 -
[剑指offer] 二叉搜索树的第k大节点(C++解法)
给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出...原创 2020-03-19 20:58:40 · 542 阅读 · 0 评论 -
[剑指offer] 二叉树的深度(C++解法)
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。提示:节点总数 <= 10000C++递归解法/** * Definition...原创 2020-03-19 19:46:38 · 373 阅读 · 0 评论 -
[剑指offer] 左旋转字符串 (C++解法)
面试题58 - II. 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6...原创 2020-03-19 19:36:17 · 248 阅读 · 0 评论