- 博客(83)
- 收藏
- 关注
原创 LeetCode 24: 两两交换链表中的节点
目录LeetCode 24: 两两交换链表中的节点题目描述解题LeetCode 24: 两两交换链表中的节点题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.解题 /** * Definition for singly-linked list. * struct ListNode { *
2020-09-27 00:12:23 177
原创 LeetCode 509. 斐波那契数
目录LeetCode 509. 斐波那契数题目描述解题LeetCode 509. 斐波那契数题目描述斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1.示例 2
2020-09-27 00:02:20 218
原创 LeetCode 70.爬楼梯
目录LeetCode 70.爬楼梯题目描述解题LeetCode 70.爬楼梯题目描述爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶解题
2020-09-26 23:58:31 150
原创 LeetCode 104.二叉树的最大深度
目录LeetCode 104.二叉树的最大深度题目描述解题LeetCode 104.二叉树的最大深度题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。解题 /** * Definition for a binary tree node. * struct TreeNode { * int va
2020-09-26 21:23:04 2184
原创 LeetCode 50. Pow(x, n)
目录LeetCode 50. Pow(x, n)题目描述解题LeetCode 50. Pow(x, n)题目描述实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0
2020-09-26 21:18:40 88
原创 LeetCode 779.第K个语法符号
目录LeetCode 779.第K个语法符号题目描述解题LeetCode 779.第K个语法符号题目描述在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)例子:输入: N = 1, K = 1输出: 0输入: N = 2, K = 1输出: 0输入: N = 2, K = 2输出: 1输入: N = 4, K = 5输出: 1解释:第一行: 0第二行: 01第三行
2020-09-26 21:06:15 106
原创 LeetCode 95.不同的二叉搜索树 II
目录LeetCode 95.不同的二叉搜索树 II题目描述解题LeetCode 95.不同的二叉搜索树 II题目描述给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。解题 对一个二叉搜索树的中序遍历结果就是得到一个有序的序列{1,2,3...n}\{1, 2, 3...n\}{1,2,3...n},本题的目的是要求所有能得到这个有序序列的二叉搜索树。观察这个有序序列,每一个数字都可以作为根节点,它将整个序列一分为二,左边一部分,右边一部分,左边的数字在二叉树上对应其左
2020-09-26 19:37:13 86
原创 LeetCode 336: 回文对
目录LeetCode 336: 回文对题目描述解题LeetCode 336: 回文对题目描述给定一组 互不相同 的单词, 找出所有不同 的索引对(i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串。示例 1:输入:[“abcd”,“dcba”,“lls”,“s”,“sssll”]输出:[[0,1],[1,0],[3,2],[2,4]]解释:可拼接成的回文串为 [“dcbaabcd”,“abcddcba”,“slls”,“llssssll”]示例
2020-09-14 21:38:31 155
原创 Leetcode 剑指 Offer 20 表示数值的字符串
目录LeetCode : 剑指 Offer 20 表示数值的字符串题目描述解题LeetCode : 剑指 Offer 20 表示数值的字符串题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。解题 class Solution {public: bool isNumber
2020-09-14 21:13:12 75
原创 LeetCode 212: 单词搜索 II
目录LeetCode 212: 单词搜索 II题目描述解题LeetCode 212: 单词搜索 II题目描述给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:words = [“oath”,“pea”,“eat”,“rain”] and board =[[‘o’,‘a
2020-09-14 20:53:50 112
原创 LeetCode 421数组中两个数的最大异或值
目录LeetCode 421数组中两个数的最大异或值题目描述解题LeetCode 421数组中两个数的最大异或值题目描述给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, j < n 。你能在O(n)的时间解决这个问题吗?示例:输入: [3, 10, 5, 25, 2, 8]输出: 28解释: 最大的结果是 5 ^ 25 = 28.解题
2020-09-14 20:33:20 244
原创 LeetCode 211: 添加与搜索单词 - 数据结构设计
目录LeetCode 211: 添加与搜索单词 - 数据结构设计题目描述解题LeetCode 211: 添加与搜索单词 - 数据结构设计题目描述如果数据结构中有任何与word匹配的字符串,则bool search(word)返回true,否则返回false。 单词可能包含点“。” 点可以与任何字母匹配的地方。请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。实现词典类 WordDictionary :WordDictionary() 初始化词典对象void
2020-09-10 22:27:28 232
原创 LeetCode 648: 单词替换
目录LeetCode题目描述解题LeetCode题目描述在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。现在,给定一个由许多词根组成的词典和一个句子。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。你需要输出替换之后的句子。示例:输入:dict(词典) = [“c
2020-09-10 22:14:01 242
原创 LeetCode 108: 将有序数组转换为二叉搜索树
目录LeetCode 108: 将有序数组转换为二叉搜索树题目描述解题LeetCode 108: 将有序数组转换为二叉搜索树题目描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:解题 /** * Definition for a
2020-09-10 21:50:04 92
原创 LeetCode 剑指 Offer 55 - II. 平衡二叉树 LCOF
目录LeetCode题目描述解题LeetCode题目描述解题 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {publ
2020-09-10 21:18:39 100
原创 LeetCode 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
目录LeetCode 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先题目描述解题LeetCode 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,nu
2020-09-10 21:09:04 81
原创 LeetCode 703:数据流中的第K大元素
目录LeetCode 703:数据流中的第K大元素题目描述解题LeetCode 703:数据流中的第K大元素题目描述解题 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。示例:int k = 3;int[] arr = [4,5,8,2];KthLarg
2020-09-09 23:27:50 244
原创 LeetCode 450:删除二叉搜索树中的节点
目录LeetCode 450:删除二叉搜索树中的节点题目描述解题LeetCode 450:删除二叉搜索树中的节点题目描述给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例:root = [5,3,6,2,4,null,7]key =
2020-09-09 21:23:33 159
原创 LeetCode 701: 二叉搜索树中的插入操作
目录LeetCode 701: 二叉搜索树中的插入操作题目描述解题LeetCode 701: 二叉搜索树中的插入操作题目描述给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和 插入的值: 5你可以返回这个二叉搜索树:
2020-09-09 20:59:55 145
原创 LeetCode 700: Search in a Binary Search Tree
目录LeetCode 700: Search in a Binary Search Tree题目描述解题LeetCode 700: Search in a Binary Search Tree题目描述给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \
2020-09-09 20:29:10 84
原创 LeetCode 173: 二叉搜索树迭代器
目录LeetCode 173: 二叉搜索树迭代器题目描述解题LeetCode 173: 二叉搜索树迭代器题目描述实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回
2020-09-09 20:25:32 82
原创 LeetCode 98: 验证二叉搜索树
目录LeetCode 98: 验证二叉搜索树题目描述解题LeetCode 98: 验证二叉搜索树题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \1 4 / \ 3
2020-09-08 22:58:20 195
原创 LeetCode 347:前 K 个高频元素
目录LeetCode 347:前 K 个高频元素题目描述解题哈希+排序哈希+优先队列LeetCode 347:前 K 个高频元素题目描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log
2020-07-26 20:48:24 95
原创 LeetCode 454:四数相加 II
目录LeetCode 454:四数相加 II题目描述解题LeetCode 454:四数相加 II题目描述给定四个包含整数的数组列表 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 = [ 1, 2]
2020-07-26 19:13:44 155
原创 LeetCode 3:无重复字符的最长子串
目录LeetCode 3:无重复字符的最长子串题目描述解题LeetCode 3:无重复字符的最长子串题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “
2020-07-26 19:05:44 179
原创 LeetCode 771:宝石与石头
目录LeetCode 771:宝石与石头题目描述解题LeetCode 771:宝石与石头题目描述给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = “aA”, S = “aAAbbbb”输出: 3示例 2:输入: J = “z”, S = “ZZ”输出: 0
2020-07-26 16:16:46 80
原创 LeetCode 652:寻找重复的子树
目录LeetCode 652:寻找重复的子树题目描述解题LeetCode 652:寻找重复的子树题目描述解题 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *
2020-07-26 16:11:34 180
原创 LeetCode 36:有效的数独
目录LeetCode 36:有效的数独题目描述解题LeetCode 36:有效的数独题目描述判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:[[“5”,“3”,".",".",“7”,".",".",".","
2020-07-19 20:44:08 143
原创 LeetCode 49:字母异位词分组
目录LeetCode 49:字母异位词分组题目描述解题LeetCode 49:字母异位词分组题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。解题 简单逻辑:一个新词首先判断当前输出二维
2020-07-19 14:41:25 228
原创 LeetCode 348: 存在重复元素 II
目录LeetCode 348: 存在重复元素 II题目描述解题LeetCode 348: 存在重复元素 II题目描述给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [
2020-07-14 20:23:44 128
原创 LeetCode 350: 两个数组的交集 II
目录LeetCode 350: 两个数组的交集 II题目描述解题哈希表排序LeetCode 350: 两个数组的交集 II题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序
2020-07-14 20:03:47 133
原创 LeetCode 387: 字符串中的第一个唯一字符
目录LeetCode 387: 字符串中的第一个唯一字符题目描述解题LeetCode 387: 字符串中的第一个唯一字符题目描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。【示例】s = “leetcode”返回 0s = “loveleetcode”返回 2提示:你可以假定该字符串只包含小写字母。解题 class Solution {public: int firstUniqChar(string s) {
2020-07-14 19:17:49 133
原创 LeetCode 599: 两个列表的最小索引总和
目录LeetCode 599: 两个列表的最小索引总和题目描述解题LeetCode 599: 两个列表的最小索引总和题目描述假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。【示例 1】输入:[“Shogun”, “Tapioca Express”, “Burger King”, “KFC”][“P
2020-07-12 20:37:05 298
原创 LeetCode 205: 同构字符串
目录LeetCode 205: 同构字符串题目描述解题哈希表另一种映射find函数LeetCode 205: 同构字符串题目描述给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。【示例 1】输入: s = “egg”, t = “add”输出: true【示例 2】输入: s = “foo”, t =
2020-07-11 21:29:02 99
原创 LeetCode 1: 两数之和
目录LeetCode 1: 两数之和题目描述解题哈希表排序LeetCode 1: 两数之和题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。【示例】给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解题哈希表 遍历整个数组
2020-07-10 20:40:25 66
原创 LeetCode 202: 快乐数
目录LeetCode 202: 快乐数题目描述解题哈希快慢指针数学法LeetCode 202: 快乐数题目描述编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。【 示例】输入:19输出:true解释:12 + 92 = 8282
2020-07-09 21:15:16 199
原创 LeetCode 349: 两个数组的交集
目录LeetCode 350: 两个数组的交集题目描述解题关联容器排序+去重LeetCode 350: 两个数组的交集题目描述给定两个数组,编写一个函数来计算它们的交集。【示例 1】输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]【示例 2】输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。解题关联容器 借助map
2020-07-09 20:38:41 178
原创 LeetCode 136: 只出现一次的数字
目录LeetCode 136: 只出现一次的数字题目描述解题异或LeetCode 136: 只出现一次的数字题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?【示例 1]】输入: [2,2,1]输出: 1【示例 2】输入: [4,1,2,1,2]输出: 4解题 思路I:排序,对整个数组排序,寻找与左右两边都不相同的那个数字。 思路I
2020-07-09 20:04:15 157
原创 Leetcode 217:存在重复元素
目录LeetCode题目描述解题LeetCode题目描述解题 bool containsDuplicate(vector<int>& nums) { map<int, bool> dict; for (int i=0; i<nums.size(); ++i){ if (dict[nums[i]]) return true; dict[nums[
2020-07-09 00:01:30 135
原创 快速排序算法
目录快速排序算法引子延申快速排序算法 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,在了解排序算法之后,我想以我的思路来描述这种排序方法。引子 有一个无序的数组NNN,nin_{i}ni表示其中的某一个元素。如果先不考虑将整个数组由大到小排序,只是将大于nin_{i}ni的数字放在nin_{i}ni的右边,小于nin_{i}ni的数字放在其左边,该如何实现?
2020-07-09 00:00:25 269 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人