
Leetcode
yyyyyyyuande
这个作者很懒,什么都没留下…
展开
-
leetcode 4. 寻找两个有序数组的中位数,c语言
leetcode上第四道题,如下。给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。题目很简洁,首先要搞懂中位数的概念,这玩意和平均数是有差别的。一开始我就搞错了,把中位数和平均数搞混了,结果做了半天结果越来越离谱。百度...原创 2019-10-30 17:20:38 · 776 阅读 · 1 评论 -
leetcode 450. 删除二叉搜索树中的节点 c语言实现
如题:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例:root = [5,3,6,2,4,null,7]key = ...原创 2019-10-30 17:31:15 · 766 阅读 · 0 评论 -
leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法
如题:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7这道题明显是有套路的,如果你还不会,说明你是第一次遇到,还好现在...原创 2019-10-30 17:31:09 · 1335 阅读 · 0 评论 -
leetcode 105. 从前序与中序遍历序列构造二叉树 c语言递归解法
如题:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7套路题,考察你有没有学习过这种题型。同样的问题还有知道中序与后序构造...原创 2019-10-30 17:26:08 · 746 阅读 · 0 评论 -
leetcode 703. 数据流中的第K大元素 最小堆解法 c语言
如题:设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的KthLargest类需要一个同时接收整数k 和整数数组nums的构造器,它包含数据流中的初始元素。每次调用KthLargest.add,返回当前数据流中第K大的元素。示例:int k = 3;int[] arr = [4,5,8,2];KthLargest k...原创 2019-10-30 17:25:42 · 612 阅读 · 0 评论 -
leetcode 136. 只出现一次的数字 c语言
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4这道题如果没有时间复杂度或者空间复杂度,的确不复杂,通过对数组排序后,两两比较,如果存在不等,返回即...原创 2019-10-30 17:24:57 · 546 阅读 · 0 评论 -
leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root...原创 2019-10-30 17:26:15 · 1966 阅读 · 2 评论 -
Leetcode 70. 爬楼梯 动态规划 c语言
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 +...原创 2019-10-30 17:26:42 · 802 阅读 · 0 评论 -
面试题leetcode 3. 无重复字符的最长子串 暴力法和滑动窗口解法
最初的思路遍历每个字符,找到以它开始的最长的子串。俗称暴力法,确实很暴力,时间复杂度达到O(n^3),唯一的好处是它能解决问题。暴力遍历法的大概流程是准备一个hash字符数组,然后遍历每个字符放到hash表里,有重复的则记录子串长度,然后重置hash表并从下一个字符开始。滑动窗口解法时间复杂度可以达到O(n),相较于暴力法节省了不少,但其思路和暴力法却没有根本差异,都是遍历字符,难就难在不容易...原创 2019-10-30 17:19:30 · 912 阅读 · 0 评论 -
leetcode 101. 对称二叉树 递归解法 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这道题刚开始想到的是使用队列+BFS,因为...原创 2019-10-30 17:26:04 · 515 阅读 · 0 评论 -
leetcode 98. 验证二叉搜索树 递归遍历左右子树和中序遍历 c语言解法
如题:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 6...原创 2019-10-30 17:25:15 · 903 阅读 · 0 评论 -
leetcode 5. 最长回文子串 暴力法、中心扩展算法、动态规划,马拉车算法(Manacher Algorithm)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案首先,看懂题目很重要!!!啥是回文?把相同的词汇或句子 [1] ,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。这道题对时间复杂度没有要求,可即便如此,刚开始还是毫无办法 ╮(...原创 2019-10-30 17:21:03 · 889 阅读 · 0 评论 -
leetcode 6 Z 字形变换 c代码
题目如下:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"刚看到这道题的时候,动手在纸上画...原创 2019-10-30 17:24:04 · 433 阅读 · 0 评论 -
leetcode 349. 两个数组的交集 两种方案,c语言实现
如题:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。属于简单类型,两种方案。方案一:是使...原创 2019-10-30 17:25:04 · 2350 阅读 · 0 评论 -
leetcode 752. 打开转盘锁 c代码
先看题目:你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为 '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组...原创 2019-10-30 17:24:13 · 784 阅读 · 0 评论 -
leetcode 200.岛屿数量 c代码
题目如下:给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例一:输入:11110110101100000000输出: 1示例二:输入:11000110000010000011输出: 3解法比较简单,遍历数组,遇到陆地1...原创 2019-10-30 17:24:21 · 3195 阅读 · 0 评论 -
leetcode 151. 翻转字符串里的单词 c代码 三种方案
如题:给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输...原创 2019-10-30 17:24:29 · 1249 阅读 · 0 评论 -
leetcode 279. 完全平方数 bfs广度优先解法 图解 动态规划解法 c代码
如题:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.这道题和leetcode 752. 打开转盘锁类似,都可以使用广度优先搜索...原创 2019-10-30 17:24:42 · 839 阅读 · 0 评论 -
leetcode 739. 每日温度 单调栈解法和暴力法及其优化 c代码
如题:根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000...原创 2019-10-30 17:24:51 · 682 阅读 · 0 评论 -
leetcode 454. 四数相加 II c语言
如题:给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过231 - 1 。例如:输入:A ...原创 2019-10-30 17:25:09 · 642 阅读 · 0 评论 -
面试题 合并两个有序链表
这道题常规解法有两种,可能还有其它。解法1,设置指针 i, j 分别指向两个链表,比较 i, j 大小,小的先挂到新链表上,然后移动指针继续比较,直到某个链表走到最后,这时候把另一个链表剩余的全挂过去。解法2, 使用递归方法,这个我一开始也没想到,方法也很简单,把合并两个链表为一个的过程看成是在两个链表中每次找出一个最小值的过程。然后把这个最小值挂到prevNode->next指...原创 2019-10-30 17:19:15 · 512 阅读 · 0 评论