leetcode
运气好到爆
点点滴滴记录成长从2022年1月4日起,每周更新三篇文章
展开
-
33. 搜索旋转排序数组 C++实现
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], t原创 2020-07-12 00:07:16 · 361 阅读 · 0 评论 -
236. 二叉树的最近公共祖先 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,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5..原创 2020-07-11 23:43:50 · 302 阅读 · 0 评论 -
110. 平衡二叉树 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 / \ 2 2 / \ 3 3...原创 2020-07-11 23:00:26 · 150 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems...原创 2020-07-11 22:47:00 · 104 阅读 · 0 评论 -
88合并两个数组 C++实现
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6...原创 2020-07-11 18:27:29 · 718 阅读 · 0 评论 -
199. 二叉树的右视图 C++实现
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---/** * Definition for a binary tree node. * struct TreeNode { * ..原创 2020-07-11 17:58:41 · 404 阅读 · 0 评论 -
124. 二叉树中的最大路径和 c++实现
参考链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/solution/er-cha-shu-de-zui-da-lu-jing-he-zhu-yao-li-jie-ti-/给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3...原创 2020-07-11 17:28:15 · 1344 阅读 · 0 评论 -
155. 最小栈 C++实现
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[...原创 2020-07-11 15:53:07 · 173 阅读 · 0 评论 -
121. 买卖股票的最佳时机 C++实现
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。..原创 2020-07-11 15:36:54 · 346 阅读 · 0 评论 -
leetcode 25. K 个一组翻转链表 C++实现
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明: 你的算法只能使用常数的额外空间。 ...原创 2020-07-11 14:46:52 · 198 阅读 · 0 评论 -
剑指offer:不是用乘除和判断条件进行求和 C++
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。//使用静态变量//注意静态变量属于类,只能通过类进行访问,同时需要再类外进行定义,静态变量只能通过静态成员函数操作class Solution {public: static int N; static int sum; static void Set(){ N = 0; sum = 0;原创 2020-06-30 23:20:46 · 103 阅读 · 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]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)class Solution {public: // B就像是对角线上为1,其他数据为Ai的矩阵的横向乘积 // 可以看作是两.原创 2020-06-30 23:01:47 · 166 阅读 · 1 评论 -
剑指offer:正则表达式C++实现
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配class Solution {public: // 可以使用递归进行实现 // 1.判断第一个字符相等 1.说明都是字符, 2. 模式串是. // 2.*只能出现在第1位之后,.原创 2020-06-30 22:08:09 · 122 阅读 · 1 评论 -
剑指offer:把字符串转换成整数 C++实现
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入+21474836471a33输出21474836470总体很简单,主要是第一个字符是否为正负号,中间是否出现过非数字的字符,对于负数的输出class Solution {public: int St.原创 2020-06-28 23:45:39 · 132 阅读 · 0 评论 -
剑指offer:数组中重复的数字C++实现
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。/* lev(a, b ) = { max(a,b) a * b = 0; min( lev(a-1, b) lev(a, b-1) lev(a - 1, b - 1)原创 2020-06-28 23:22:55 · 264 阅读 · 0 评论 -
c++求编辑距离
题目描述给定两个字符串,已知可以使用三种方式进行变换1. 插入一个字符2. 删除一个字符3. 更改一个字符请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2输入描述:输入两个字符串,字符串的长度<=1000输出描述:最小变换次数示例1输入hellohelle输出1写在前面,好久没有直接些main函数了,string也不怎么会用了,这道题目标注的是简单,但是因为之前没有了解过编辑距离,看到这个题目的时候是真的一脸懵原创 2020-06-28 22:53:37 · 1150 阅读 · 2 评论 -
剑指offer:链表中的环入口
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/// 首先判断是否包含环,如果包含环,则统计环中节点的个数// 1.使用两个指针,一个走两步,一个走一步,则一定能在环中相遇// 2.相遇后一个节点不动,另一个节点原创 2020-06-27 21:18:54 · 143 阅读 · 0 评论 -
剑指offer:求二叉树当前节点的在中序遍历中的下一个节点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(.原创 2020-06-27 20:31:40 · 144 阅读 · 0 评论 -
剑指offer:判断一颗二叉数是否对称C++
请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*///判定一个二叉树是否是对成的,可以看成,一个二叉树.原创 2020-06-27 20:09:52 · 241 阅读 · 0 评论 -
剑指offer:之字形打印二叉数C++
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*///这里要求之字形打.原创 2020-06-27 19:52:32 · 97 阅读 · 0 评论 -
剑指offer:按照层的方式打印二叉数C++
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/// 1.按照层打印二叉树,需要使用队列,先进先出// 2.每层打印一行,需要判断当前行有多少个.原创 2020-06-27 19:14:53 · 145 阅读 · 0 评论 -
leetCode:C++求字符串的最长无重复字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子...原创 2020-06-27 18:21:12 · 750 阅读 · 0 评论 -
剑指offer:判断一个二叉树是否是一个平衡二叉树:平衡二叉树:左右子树深度差不超过1
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树题目解析:已经写到注释里面了。class Solution { //平衡二叉树是指左右子树的深度差不能超过1 //这里我们只需要统计左右子树的深度就可以了public: //用于统计二叉树的深度 int getDep(TreeNo...原创 2020-04-30 17:51:58 · 654 阅读 · 0 评论 -
剑指offer:复制复杂链表 使用C++实现
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题目解析已经写到注释里面了,这里面写的时候一定要细心哟/*struct RandomListNode { int label; ...原创 2020-04-30 17:32:54 · 107 阅读 · 0 评论 -
剑指offer:打印二叉树中和为K的所有路径: 二叉树中和为某一值的路径
题目:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。题目解析已经写到代码中啦!/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v...原创 2020-04-30 15:50:26 · 531 阅读 · 0 评论 -
剑指offer:判断一个序列是不是二叉搜索数的后序遍历,二叉搜索数:左子树小于根节点,右子树大于根节点
题目:输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。//判断是否是搜索二叉树的遍历//搜索二叉树:左子树小于根节点,右边子树大于根节点//从数组后面开始遍历,找到右子树的边界,然后递归右子树//判断左子树序列中是否存在比根节点大的数,如果没有递归左子树,如果有返回falseclass ...原创 2020-04-30 15:10:10 · 1507 阅读 · 0 评论 -
剑指offer:从上到下打印二叉树,有称之为广度优先遍历
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目解析我已经写入到注释里面了!/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*///从...原创 2020-04-30 15:07:47 · 98 阅读 · 0 评论 -
剑指offer:栈的压入、弹出序列 使用C++实现
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)题目解析已经写在代码中了!//首先按照数组2进行遍历//1.判断改字符是否是...原创 2020-04-30 12:59:09 · 168 阅读 · 0 评论 -
剑指offer :使用C++实现二叉树的镜像。
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/// 二叉树的镜像,看着像不想每次都把左右子...原创 2020-04-26 14:57:25 · 129 阅读 · 0 评论 -
剑指offer - 二叉树的子结构:判断B是否是A的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解释和说明已经写在注释里面了:/*struct TreeNode { int val;// 这是和是上面不一样的地方,树上面是double类型 struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2020-04-26 14:49:20 · 130 阅读 · 0 评论 -
剑指offer:合并两个链表 在线练习
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路已经写在代码注释里面了:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/// 1...原创 2020-04-24 09:26:06 · 104 阅读 · 0 评论 -
剑指offer: 如何求链表的倒数k个数呢? 不动手敲敲你永远不会发现自己是真的不懂
题目:输入一个链表,输出该链表中倒数第k个结点。解题思路我写在代码注释中了,我的天,看了n遍书上代码的我,居然敲不出来,太难啦!重复三遍:我是傻子,我是傻子,我是傻子。。。。。呜呜,以示惩戒! 绝对不删/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(...原创 2020-04-23 21:20:13 · 115 阅读 · 0 评论 -
剑指offer【2-13】:机器人运动范围
题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?class Solution { ...原创 2020-04-23 09:43:23 · 110 阅读 · 0 评论 -
剑指offer【3.3】代码鲁棒性:链表的翻转(牛客网)
题目:输入一个链表,反转链表后,输出新链表的表头。注意对异常输入进行判定。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*///定义前后两个指针p1, p2//相当于在链表的头部插入新的节点class Solution {...原创 2020-04-23 09:05:14 · 85 阅读 · 0 评论 -
剑指offer【第二章】:动态规划与贪心算法-剪绳子(牛客网)
题目:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。class Solution { // number == 1 re...原创 2020-04-23 07:27:40 · 153 阅读 · 0 评论 -
剑指offer:对于链表的练习【反向打印】
题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/// ...原创 2020-04-22 18:56:28 · 87 阅读 · 1 评论 -
剑指offer:使用特殊字符替换字符串中的空格(牛客网练习)
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: // 有时间限制,可以考虑用两个指针,两次循环 // 1.首先遍历一遍统计空格的个数num, // 2.利用新指针指向原始的 lenth+num*2 位置 ...原创 2020-04-22 18:50:30 · 147 阅读 · 0 评论 -
剑指offer:在特殊二维数组中的查找数字(牛客网练习)
上题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:因为从左到右,和从上到下都是递增的,那如果是从[0][0]开始查找则两个方向都是增加的,太难判断走哪里了,要是一个方向增加,一个方向减少就好了,哇塞,如果我从第一行的最右边开始往...原创 2020-04-22 18:48:16 · 160 阅读 · 0 评论 -
剑指offer[18-2] 删除了链表中重复的节点(不保留)
我今天真的是心态崩了,我的天,自己写了一遍没有通过,又按照书上的又敲了一遍还是提示通过率为0,我太难了今天就来细细的分析这个!上题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5题目解析:主要考察删除链表...原创 2020-04-22 18:34:26 · 103 阅读 · 0 评论