![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode算法
杏壳儿
好读书不求甚解每有会意一会儿就忘
展开
-
leetcode(46)--设计链表
class MyLinkedList {public: private: struct ListNode { int val; ListNode* next; ListNode(int x):val(x),next(nullptr){}; }; ListNode* head; ListNode* t...原创 2020-04-17 15:43:37 · 337 阅读 · 0 评论 -
leetcode(45)--从中序与后序遍历序列构造二叉树&&从中序与前序遍历序列构造二叉树
从中序与后序遍历序列构造二叉树class Solution {public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { return helper(postorder,inorder,0,postorder.size()-1,0,in...原创 2020-03-15 20:44:20 · 113 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { int blankNumber=0; int oldSt...原创 2020-03-13 10:21:01 · 89 阅读 · 0 评论 -
leetcode(44)--Search in a Binary Search Tree
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 ...原创 2020-03-03 11:14:40 · 76 阅读 · 0 评论 -
leetcode(43)-- 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[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-02 14:39:30 · 80 阅读 · 0 评论 -
leetcode(42)--合并两个有序链表
题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * struct ListNode { * ...原创 2020-02-28 09:07:41 · 78 阅读 · 0 评论 -
leetcode(41)-- 反转链表
题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?思路:将链表从头取出,先取出的为 first , 后取出的为 second, 之后取出的 second->next=first...原创 2020-02-27 18:25:49 · 64 阅读 · 0 评论 -
leetcode(40)--删除链表的倒数第N个节点
题目:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路:1.先遍历计数,再确定删除的位置,需要注意的是删...原创 2020-02-27 14:48:20 · 74 阅读 · 0 评论 -
leetcode(39)--外观数列
题目:「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 1112211被读作"one 1"("一个一") , 即11。11 被读作"two 1s"("两个一"), 即21。21 被读作"one 2", "one 1"("一...原创 2020-02-27 12:12:34 · 92 阅读 · 0 评论 -
leetcode(38)--字符串转换整数
题目:请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,...原创 2020-02-27 11:37:15 · 122 阅读 · 0 评论 -
leetcode(37)--环形链表 II
题目:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node i...原创 2020-02-15 11:49:49 · 63 阅读 · 0 评论 -
leetcode(36)--环形链表
题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], ...原创 2020-02-15 09:54:25 · 69 阅读 · 0 评论 -
温故之新
还需再看学习的:设计链表 克隆图 树的遍历原创 2020-02-14 14:10:03 · 125 阅读 · 0 评论 -
leetcode(35)--打开转盘锁
题目:你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为 '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组...原创 2020-02-12 10:47:54 · 118 阅读 · 0 评论 -
leetcode(34)--二叉树的后序遍历
题目:给定一个二叉树,返回它的 后序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路:递归迭代法class Solution {public: vector<int> postorderTraversal(T...原创 2020-02-11 18:44:57 · 85 阅读 · 0 评论 -
leetcode(32)--二叉树的前序遍历
题目:给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路:非迭代方法;class Solution {public: vector<int> preorderTraversal...原创 2020-02-11 10:38:25 · 71 阅读 · 0 评论 -
leetcode(31)--常数时间插入、删除和获取随机元素
题目:设计一个支持在平均时间复杂度 O(1)下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。 remove(val):元素 val 存在时,从集合中移除该项。 getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。示例 :// 初始化一个空的集合。RandomizedSet randomSet = n...原创 2020-02-10 10:57:04 · 147 阅读 · 0 评论 -
leetcode(30)--前 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 n) ...原创 2020-02-09 19:05:52 · 79 阅读 · 0 评论 -
leetcode(29)-- 四数相加 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 ...原创 2020-02-09 18:22:25 · 108 阅读 · 0 评论 -
leetcode(28)--无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是"abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复...原创 2020-02-09 17:44:40 · 70 阅读 · 0 评论 -
leetcode(27)--宝石与石头
题目:给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:输入: J = "z",...原创 2020-02-09 17:15:00 · 62 阅读 · 0 评论 -
leetcode(26)--字母异位词分组
题目:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。 不考虑答案输出的顺序。思路:先将字符...原创 2020-02-08 12:23:23 · 95 阅读 · 0 评论 -
leetcode(25)-- 两个数组的交集 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-02-06 18:48:19 · 106 阅读 · 0 评论 -
leetcode(24)--两个列表的最小索引总和
题目:假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。示例 1:输入:["Shogun", "Tapioca Express", "Burger King", "KFC"]["Pi...原创 2020-02-05 11:35:12 · 136 阅读 · 0 评论 -
leetcode(23)--同构字符串
题目:给定两个字符串s和t,判断它们是否是同构的。如果s中的字符可以被替换得到t,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = "egg", t = "add"输出: true示例 2:输入: s = "foo", t = "ba...原创 2020-02-04 13:16:59 · 89 阅读 · 0 评论 -
leetcode(21)--快乐数
题目:编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。示例:输入: 19输出: true解释: 12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + ...原创 2020-02-04 10:00:19 · 163 阅读 · 0 评论 -
leetcode(20)--两个数组的交集
题目:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。思路:建立两个unordered...原创 2020-02-04 07:59:18 · 92 阅读 · 0 评论 -
leetcode(19)--只出现一次的数字
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4思路:因为元素最多出现两次,则使用unordered_set保存元素,如果hashset...原创 2020-02-03 21:30:06 · 111 阅读 · 0 评论 -
leetcode(18)--存在重复元素
题目:给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true思路;使用unorder...原创 2020-02-03 20:50:51 · 52 阅读 · 0 评论 -
leetcode(17)--设计哈希映射
题目:不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。 get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。 remove(key):如果映射中存在这个键,删除这个数值对。示例:MyHashMap hashMap = n...原创 2020-02-03 20:03:18 · 74 阅读 · 0 评论 -
leetcode(16)--设计哈希集合
题目:不使用任何内建的哈希表库设计一个哈希集合具体地说,你的设计应该包含以下的功能add(value):向哈希集合中插入一个值。 contains(value) :返回哈希集合中是否存在这个值。 remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。示例:MyHashSet hashSet = new MyHashSet();hash...原创 2020-02-03 19:30:44 · 89 阅读 · 0 评论 -
leetcode(15)--每日温度
题目:根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。...原创 2020-02-01 18:04:28 · 82 阅读 · 0 评论 -
leetcode(14)--有效的括号
题目:给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: f...原创 2020-02-01 12:27:03 · 126 阅读 · 0 评论 -
leetcode(13)--最小栈
题目:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。 pop()-- 删除栈顶的元素。 top()-- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStac...原创 2020-02-01 09:51:51 · 113 阅读 · 0 评论 -
leetcode(1)--删除排序数组中的重复项
题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array著作权归领扣网络所有...原创 2019-07-22 20:29:00 · 84 阅读 · 0 评论 -
leetcode(12)--设计循环队列
题目设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:My...原创 2020-01-31 12:27:43 · 97 阅读 · 0 评论 -
leetcode(11)--反转字符串中的单词 III
题目:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc"注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。解答:思路1:将字符串中的每个单词提取出来,对每个单词进行...原创 2020-01-31 10:00:38 · 82 阅读 · 0 评论 -
leetcode(10)--翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"...原创 2020-01-30 21:06:10 · 109 阅读 · 0 评论 -
leetcode(9)--长度最小的子数组
题目:给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组[4,3]是该条件下的长度最小的连续子数组。解答:1.暴力方法:思路:用i从左到右遍历数组,用j从当前元素到数组尾部...原创 2020-01-30 12:35:53 · 91 阅读 · 0 评论 -
leetcode(8)--二分查找
题目:给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-1,0,3,5...原创 2020-01-29 17:28:46 · 86 阅读 · 0 评论