![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
兰亭落雪
目的不能抵达怎么付出都是偏差。
展开
-
有效括号生成问题
For example, givenn= 3, a solution set is:[ "((()))", "(()())", "(())()", "()(())", "()()()"] 思路:由于我们要找出所有满足条件的解,答案是一个解集,因此此题可以采用回溯法来解决。“回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过...原创 2019-03-17 15:32:38 · 405 阅读 · 0 评论 -
LeetCode链表类问题
在链表中穿针引线链表和数组都是线性结构,但是链表和数组的不同在于数组可以随机的对于数据进行访问。给出索引。可以以O(1)的时间复杂度迅速访问到该元素。链表只能从头指针开始。next指针指向哪里?206. Reverse Linked List反转一个链表链表反转不能改变链表值。操作每个节点的next指针。5的指针指向空的。变成指向4的。next改变示意图...原创 2019-03-17 19:27:05 · 231 阅读 · 0 评论 -
leetcode
1.旋转链表原理是先遍历整个链表获得链表长度n,然后此时把链表头和尾链接起来,在往后走n - k % n个节点就到达新链表的头结点前一个点,这时断开链表即可class Solution {public: ListNode *rotateRight(ListNode *head, int k) { if (!head) return NULL; in...原创 2019-03-17 19:37:22 · 137 阅读 · 0 评论 -
Design Twitter 面向对象设计 优先队列 HashMap
应用面向对象设计(OO)模拟Twitter的几个功能,分别是:发推postTweet(userId, tweetId): Compose a new tweet. 获取最近的十条推文getNewsFeed(userId): Retrieve the 10 most recent tweet ids in the user's news feed. Each item in the news ...原创 2019-03-27 10:00:46 · 203 阅读 · 0 评论 -
leetcode-堆
659.输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数。返回你是否能做出这样的分割?示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 : 1, 2, 33, 4, 5解题思路:贪婪解法:第一个map用来建立数字和其出现次数之间的映射fre,第二个用来建立可...原创 2019-04-08 18:00:39 · 299 阅读 · 0 评论 -
构建乘积数组
一、题目给定一个数组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)如果没有不能使用除法的限制,可以用公式B[i]=A[0]*A[1]*.....*A[n-1]/A[i]表示,使用除法时要特别注意A[i]等于0的情况。(2)...原创 2019-04-27 11:40:31 · 95 阅读 · 0 评论 -
LeetCode除自身以外数组的乘积
一、题目给定长度为n的整数数组nums,其中n> 1,返回输出数组output,其中output[i]等于nums中除nums[i]之外其余各元素的乘积。二、思路思路:利用2个辅助数组去做。一个保存顺序遍历的乘积,一个保存逆序的乘积(可以一次遍历完成)。ins[0,0,0,0]ret[4,4,4,4]计算后:ins[1,2,6,24]...原创 2019-04-27 12:38:10 · 162 阅读 · 0 评论 -
员工的重要性
一、题目描述给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度和直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员...原创 2019-04-19 10:49:58 · 824 阅读 · 0 评论 -
最长不含重复字符串的子串
一、题目从字符串中找到一个最长的不包含重复字符串的子字符串,计算该子字符串的长度二、分析动态规划f(i)表示以第i个字符为结尾的不包含重复字符的子串的最长长度,从左到右逐一扫描字符串中的字符,若第i个字符在之前没有出现过,则f(i)=f(i-1)+1;若出现过,先计算和当前位置和上一次位置的距离d。之后分情况讨论,第一种,d<=f(i-1),意味着第i个字符出现在f(i-1)...原创 2019-05-03 15:13:29 · 210 阅读 · 0 评论 -
判断两个节点是否为堂兄弟
一、题目描述在二叉树中,根节点位于深度0处,每个深度为k的节点的子节点位于深度k+1处。如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点root,以及树中两个不同节点的值x和y。只有与值x和y对应的节点是堂兄弟节点时,才返回true。否则,返回false。二、解题思路可以先分别算出两个节...原创 2019-04-19 11:30:16 · 719 阅读 · 0 评论 -
树
树一、 leetcode树汇总1、求二叉树的深度描述:给定一个二叉树,找出其最大深度。分析:二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。class Solution {public: int maxDepth(TreeNode* root) { int res=0; if(root!=nullptr) { ...原创 2019-05-16 16:35:19 · 193 阅读 · 0 评论 -
位运算
1、只出现一次的数字描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4class Solution {public: int singleNumbe...原创 2019-05-22 16:24:21 · 304 阅读 · 0 评论 -
递归
概念递归(Recursion):函数调用自己。递归算法解决问题的特点:递归就是方法里调用自身。 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算...原创 2019-05-23 11:35:16 · 202 阅读 · 0 评论 -
对称二叉树
一、问题描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[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二、解题思路判断二叉树是否...原创 2019-04-18 11:07:49 · 195 阅读 · 0 评论 -
找到数组中未出现的最小整数
【题目】: 给定一个无序整型数组arr,找到数组中未出现的最小正整数。要求时间复杂度为O(N),空间复杂度为O(1)。例如:arr=[-1,2,3,4]。返回1。arr=[1,2,3,4]。返回5。【解法】一、穷举查找最小正整数是1,所以常规的方法就是在数组中找1,然后是2,依次找下去…。一直找到第一个没有出现的正整数,这个数就是未出现的最小的正整数。for i = 1...原创 2019-03-17 19:26:49 · 3176 阅读 · 1 评论 -
压缩字符串
443. 压缩字符串给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。示例 1:输入:[“a”,”a”,”b”,”b”,”c”,”c”,”c”]输出:返回6,输入数组的前6个字符应该是:[“a”,”2”,”b”,”2”,”c”,”3...原创 2019-03-17 19:35:20 · 346 阅读 · 0 评论 -
最长公共子序列(LCS)与最长公共子串(DP)
《1》最长公共子序列(LCS)与最长公共子串(DP)http://blog.csdn.net/u012102306/article/details/53184446https://segmentfault.com/a/1190000007963594http://www.cppblog.com/mysileng/archive/2013/05/14/200265.html1....原创 2019-03-17 19:25:12 · 165 阅读 · 0 评论 -
删除链表中的重复元素
题目详情:给定 1->2->3->3->4->4->5, 返回 1->2->5.给定 1->1->1->2->3, 返回 2->3分析这类问题一般都要特地构造一个头部,比如说1 -> 1 -> 2 -> 3 -> NULL1这个时候如果把1删掉了,那么h原创 2019-03-15 10:31:25 · 2084 阅读 · 0 评论 -
n&(n-1)的妙用
基本原理:n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000可以看到原本最低位为1的那位变为0。如下应用:1. 求某一个数的二进制表示中1的个数代码块: while(n >...原创 2019-03-14 11:14:41 · 270 阅读 · 0 评论 -
布隆过滤器的原理,使用场景和注意事项
什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你“某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。实现原理HashMap 的问题讲述布隆过滤器的...原创 2019-03-14 10:36:30 · 400 阅读 · 0 评论 -
动态规划
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通...原创 2019-03-04 11:04:16 · 152 阅读 · 0 评论 -
二分
1.[LeetCode] Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值首先要判断这个有序数组是否旋转了,通过比较第一个和最后一个数的大小,如果第一个数小,则没有旋转,直接返回这个数。如果第一个数大,就要进一步搜索。我们定义left和right两个指针分别指向开头和结尾,还要找到中间那个数,然后和left指的数比较,如果中间的数大,则继续二分...原创 2018-12-04 20:16:32 · 139 阅读 · 0 评论 -
字符串
题目描述:编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串""。并且我们假设:所有输入只包含小写字母a-z。需考虑数组为空的情况。示例:输入: ["flower","flow","flight"]输出: "fl"输入: ["dog","racecar","car"]输出: ""输入原创 2019-03-17 18:56:16 · 183 阅读 · 0 评论 -
递归与回溯
17.[LeetCode] Letter Combinations of a Phone Number 电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf"原创 2019-03-17 18:57:26 · 1967 阅读 · 0 评论 -
二叉树与递归
104.[LeetCode] Maximum Depth of Binary Tree 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7...原创 2019-03-17 18:57:39 · 1061 阅读 · 0 评论 -
判断是否有环
1、 给出两个单向链表的头指针pHead1和pHead2,判断这两个链表是否相交。假设两个链表均不带环。示意图如下:如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有的。也就是说,如果两个链表相交,那么最后一个节点肯定是共有的。先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,否则不相...原创 2019-03-17 18:59:31 · 359 阅读 · 0 评论 -
栈和队列
20.[LeetCode] Valid Parentheses 验证括号给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"...原创 2019-03-17 18:58:29 · 302 阅读 · 0 评论 -
链表
206.[LeetCode] Reverse Linked List 倒置链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?1、非递归(迭代)方式 迭代的方式是从链头开始处理,如...原创 2019-03-17 18:58:41 · 313 阅读 · 0 评论 -
查找表相关的问题
349.[LeetCode] Intersection of Two Arrays 两个数组相交这道题让我们找两个数组交集的部分(不包含重复数字),难度不算大,我们可以用个set把nums1都放进去,然后遍历nums2的元素,如果在set中存在,说明是交集的部分,加入结果的set中,最后再把结果转为vector的形式即可:解法一:class Solution {public: ...原创 2019-03-17 18:59:09 · 345 阅读 · 0 评论 -
数组
LeetCode 125. 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true12示例 2:输入: "race a car"输出: false12思路:现将字符串的所有字母转换...原创 2019-03-17 18:58:59 · 268 阅读 · 0 评论 -
转成有序数组的最少交换次数
问题描述:第一题:现在想通过交换相邻元素的操作把一个给定序列交换成有序,最少需要交换的次数是多少?比如3 1 2 4 5需要最少交换2次。答案:需要交换的最少次数为该序列的逆序数。证明:可以先将最大数交换到最后,由于是相邻两个数交换,需要交换的次数为最大数后面的数的个数(可以看做是最大数的逆序数),然后,交换过后,去除最大数,再考虑当前最大数也需要其逆序数次交换。则每个数都需要交换其逆...原创 2019-06-03 08:44:33 · 5005 阅读 · 0 评论