leetcode
~无相~
这个作者很懒,什么都没留下…
展开
-
leetcode152. 乘积最大子数组
思路题意:求最大连续乘积和做法:用dp的想法来做,假设当前以num[i]结尾的最大连续乘积和为mx,最小连续乘积和为mn,那么对于当前的位置有三种情况①:如果当前位置为负数,mx为正数,则mx=max(mn*num[i],num[i])②:如果当前位置为负数,mx为负数,则mx=mn*num[i]③:如果当前位置为0或者mx为0,则mx=0④:如果当前位置为正数,mx为正数,则mx=mx*num[i]⑤:如果当前位置为正数,mx为负数,则mx=max(mn*num[i],num[i])综上原创 2020-05-18 16:44:13 · 80 阅读 · 0 评论 -
leetcode:136. 只出现一次的数字
思路题意:求出一个数组中只出现一次的数字要线性并且没有其他空间消耗做法:之前有一个一样的题目,将所有的数字进行异或,结果就是那个只出现过一次的数字,因为其他数字出现过两次,所以异或结果肯定是0。这里不用其他的空间,所以我用了num[0]来存下每次的结果,最后返回nums[0]即可官方题解...原创 2020-05-14 18:34:50 · 72 阅读 · 0 评论 -
leetcode221. 最大正方形
dp思路前言:本博客主要写给博主自己看,若想要更好题解,请点击下面官方题解链接这道题dp很巧,打破了我对状态设定的局限性,题目设dp[i][j]表示对于(i,j)这个点为右下角的正方形的最大长度。很容易写出状态方程:如果(i,j)点为1,则dp[i][j]=min(dp[i-1][j].dp[i-1][j-1],dp[i][j-1])+1,若为0,则dp[i][j]=0,不明白可以画一个图...原创 2020-05-08 16:36:37 · 73 阅读 · 0 评论 -
leetcode572. 另一个树的子树
kmp思路我实在没想到这个用kmp,如果正常做的话应该是ac自动机的思路,废话不多,写下我的思路,主要供我自己记忆参考的,要搞懂题建议看下官方题解,三种方法首先kmp是单匹配模式,而且一般用在字符串匹配上,所以先要把树形结构转化一下,我们都知道树有三种遍历顺序,先序,中序和后序,这题用哪一种都没关系,只要两个树的遍历顺序一样就可以了,但是光这样是不行的,例如一个根节点值为3,它只有左节点值为...原创 2020-05-07 16:44:43 · 141 阅读 · 0 评论 -
leetcode983. 最低票价
思路这篇文章主要我是写来加深自己映像和收集题目的,如果要更好的题解,下面有官方题解,自行点击,下面是我的个人对着题目的理解。首先这题目很像一个区间覆盖题目,但是又不太一样,不过贪心还是用到了。(可以不看) 自然而然我们会想到用dp[i]表示第i个日期被覆盖的时候的解,但是这样仔细一想不太对,因为除了一个日期有没有被覆盖外,这个日期之后有多少天被覆盖也是要考虑进去的状态,所以一开始我想到用...原创 2020-05-06 19:50:56 · 88 阅读 · 0 评论 -
面试题56 - I. 数组中数字出现的次数
思路首先我们看一下题目,约束很死,只有两个数出现过一次,其他数字都出现过两次其他数出现过两次,意味着把所有数字异或起来得到的res,那些成对的数字的异或值为0,所以最后答案一定是那两个出现过一次的数的异或值如何求出那两个数呢?我们先找出res中任意一个为1的位,设答案是a和b,然后去和所有数字比较一下,如果某个数字这个位也为1,就把他和a异或,否则和b异或,这样我们看一下过程,因为其他数字...原创 2020-04-28 11:25:41 · 100 阅读 · 0 评论 -
牛客——建通道
分析先把值相等的的去重,因为值相等的连接的费用为0,所以可以看成一个,之后只要求出最小费用的两个数,这两个数异或后最后一位1的位置是k,在把其他点,在k这个位置为1的点,和两个数中k位置为0的点连接,其他点中位置为0的点和两个数中k位置上为1的点连接,就是最小解,ans=lowbit(k)*(去重后点的个数-1——也就是边)代码#include <cstring>#includ...原创 2020-02-11 16:27:35 · 152 阅读 · 0 评论 -
最长有效括号--leetcode32
题目描述给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”思路想了很久,首先题目的意思要看懂,这不是求有几个有效的括号,而是求连续的最大长度,也就是说这里分两步1.你先要判断括号是否有效...原创 2019-10-21 17:59:54 · 77 阅读 · 0 评论 -
二叉树的中序遍历--迭代法
思路用一个栈来存放还没有遍历过的节点,并且保证栈内元素是中序的顺序,那么我们把所有元素都遍历一边的时候,就是栈为空的时候按照中序遍历的要求,如果当前节点的左节点不为NULL,就把当前节点左节点存入,再移动到左节点,如果当前节点左节点为NULL,那么就把该节点的val存入数组,再将该节点从栈内出去(因为栈内只放未遍历的节点),再判断右节点,如果不为NULL,就将该节点移动到右节点处,再将节点存入...原创 2019-10-14 19:56:00 · 582 阅读 · 0 评论 -
leetcode 44.通配符匹配
思路我这题用的回溯法,和贪心算法,其实这题一开始是没有太看出来有贪心,下面说说我的思路首先:明确分类,‘?’和匹配的情况是很容易的,最难的就是‘*’的情况。怎么回溯:我们可以把字符串看作一段一段的去匹配,每个星号分割一段,我们从前往后去匹配,匹配好了一段就往后匹配,遇到不匹配的时候,就去当前星号的“吞噬情况”。(遇到星号,我们用吞噬的想法不断尝试,首先星号不代表任何字符,然后往后遍历,去...原创 2019-10-08 20:26:25 · 111 阅读 · 0 评论 -
leetcode15. 三数之和
思路利用双指针先排序设定三个指针k,i,j,其中k是最左边的数,i是k+1,j位nums的最右边,规律:如果三个数的和大了,就将j往后移一位,如果小了,就把i往左移一位,证明不会漏解...原创 2019-10-02 12:53:33 · 58 阅读 · 0 评论 -
leetcode 56
思路首先,这题要先排序,这里用快速排序法是最快的第二,如何去和并区间我选择用一个vector<vector>来不断存入合并完成的区间,最后返回它就行了对于一个排好序的区间的集合进行和并就比较简单啦,只要用begin和end记录下一个起点区间,之后当下一个区间的起点小于等于end的时候,就去改区间的终点和end的最大值,赋值给end,表示区间合并,否则,就把当前的begin和e...原创 2019-10-01 10:25:00 · 68 阅读 · 0 评论 -
leetcode 207/拓扑排序
DFS#include <stdio.h>#include <stack>#include <iostream>#include <time.h>#include <vector>#include <string>#include <algorithm>using namespace std;in...原创 2019-09-29 20:26:32 · 118 阅读 · 0 评论