自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(234)
  • 收藏
  • 关注

原创 978. 最长湍流子数组

978. 最长湍流子数组当 A的子数组A[i], A[i+1], ..., A[j]满足下列条件时,我们称其为湍流子数组:若i <= k < j,当 k为奇数时,A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若i <= k < j,当 k 为偶数时,A[k] > A[k+1],且当 k为奇数时,A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍...

2021-02-26 12:53:44 154

原创 518. 零钱兑换 II

518. 零钱兑换 II给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: ..

2021-01-28 18:17:10 189

原创 343. 整数拆分

343. 整数拆分给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。基本思路:动态规划,dp[i]表示的是数字i可以拆分的最大乘积,数字可以拆分为2,3个及其以上的数字相乘,f(i)=max((i-j)*j,j*dp[i-...

2021-01-27 21:50:41 331

原创 1579. 保证图可完全遍历

1579. 保证图可完全遍历Alice 和 Bob 共有一个无向图,其中包含 n 个节点和 3种类型的边:类型 1:只能由 Alice 遍历。类型 2:只能由 Bob 遍历。类型 3:Alice 和 Bob 都可以遍历。给你一个数组 edges ,其中 edges[i] = [typei, ui, vi]表示节点 ui 和 vi 之间存在类型为 typei 的双向边。请你在保证图仍能够被 Alice和 Bob 完全遍历的前提下,找出可以删除的最大边数。如果从任何节点开始,Alice 和...

2021-01-27 21:31:36 99

原创 背包问题

待定0-1背包问题1049. 最后一块石头的重量 II

2021-01-26 23:50:07 81

原创 1049. 最后一块石头的重量 II

1049. 最后一块石头的重量 II有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]输...

2021-01-26 23:47:12 169

原创 1128. 等价多米诺骨牌对的数量

1128. 等价多米诺骨牌对的数量给你一个由一些多米诺骨牌组成的列表dominoes。如果其中某一张多米诺骨牌可以通过旋转 0度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b]和dominoes[j] = [c, d]等价的前提是a==c且b==d,或是a==d 且b==c。在0 <= i < j < dominoes.length的前提下,找出满足dominoes[i] 和dom...

2021-01-26 11:06:02 92

原创 959. 由斜杠划分区域

959. 由斜杠划分区域在由 1 x 1 方格组成的 N x N 网格grid 中,每个 1 x 1方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 "\\"表示。)。返回区域的数目。示例 1:输入:[" /","/ "]输出:2解释:2x2 网格如下:示例 2:输入:[" /"," "]输出:1解释:2x2 网格如下:示例 3:输...

2021-01-25 16:58:49 121

原创 5661. 替换隐藏数字得到的最晚时间

给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。替换time 中隐藏的数字,返回你可以得到的最晚有效时间。示例 1:输入:time = "2?:?0"输出:"23:50"解释:以数字 '2' 开头的最晚一小时是 23 ,以 '0' 结尾的最晚一分钟是 50 。示例 2:输入:time = "0?:3?"输出:"09...

2021-01-24 22:02:06 149

原创 5664. 放置盒子

5664. 放置盒子有一个立方体房间,其长度、宽度和高度都等于 n 个单位。请你在房间里放置 n 个盒子,每个盒子都是一个单位边长的立方体。放置规则如下:你可以把盒子放在地板上的任何地方。如果盒子 x 需要放置在盒子 y 的顶部,那么盒子 y 竖直的四个侧面都 必须 与另一个盒子或墙相邻。给你一个整数 n ,返回接触地面的盒子的 最少 可能数量。示例 1:输入:n = 3输出:3解释:上图是 3 个盒子的摆放位置。这些盒子放在房间的一角,对应左侧位置。示例 .

2021-01-24 21:44:11 228

原创 5663. 找出第 K 大的异或坐标值

5663. 找出第 K 大的异或坐标值给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为m x n 由非负整数组成。矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。请你找出matrix 的所有坐标中第 k 大的值(k 的值从 1 开始计数)。示例 1:输入:matrix = [[5,2...

2021-01-24 21:24:22 192

原创 5662. 满足三条件之一需改变的最少字符数

5662. 满足三条件之一需改变的最少字符数给你两个字符串 a 和 b ,二者均由小写字母组成。一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 。操作的最终目标是满足下列三个条件 之一 :a 中的 每个字母 在字母表中 严格小于 b 中的 每个字母 。b 中的 每个字母 在字母表中 严格小于 a 中的 每个字母 。a 和 b 都 由 同一个 字母组成。返回达成目标所需的 最少 操作数。示例 1:输入:a = "aba", b = "caa"输出.

2021-01-24 21:19:16 236

原创 968. 监控二叉树

968. 监控二叉树给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。提示:..

2021-01-23 23:21:52 95

原创 149. 直线上最多的点数

149. 直线上最多的点数给定一个二维平面,平面上有n个点,求最多有多少个点在同一条直线上。示例 1:输入: [[1,1],[2,2],[3,3]]输出: 3解释:^|| o| o| o +------------->0 1 2 3 4示例2:输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]输出: 4解释:^|| o| o o| ...

2021-01-22 18:56:54 186

原创 面试题 01.08. 零矩阵

面试题 01.08. 零矩阵编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。示例 1:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入:[ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出:[ [0,0,0,0], [0,4,5,0], [0,3,1,0]]基本思路:...

2021-01-21 11:05:30 128

原创 1584. 连接所有点的最小费用

1584. 连接所有点的最小费用给你一个points数组,表示 2D 平面上的一些点,其中points[i] = [xi, yi]。连接点[xi, yi] 和点[xj, yj]的费用为它们之间的 曼哈顿距离:|xi - xj| + |yi - yj|,其中|val|表示val的绝对值。请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有一条简单路径时,才认为所有点都已连接。示例 1:输入:points = [[0,0],[2,2],[3,...

2021-01-20 21:27:16 132

原创 721. 账户合并

721. 账户合并给定一个列表 accounts,每个元素 accounts[i]是一个字符串列表,其中第一个元素 accounts[i][0]是名称 (name),其余元素是 emails 表示该账户的邮箱地址。现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。合并账户后,按以下格式返回账户:每个...

2021-01-20 20:51:11 96

原创 803. 打砖块

803. 打砖块有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白。砖块 稳定(不会掉落)的前提是:一块砖直接连接到网格的顶部,或者至少有一块相邻(4个方向之一)砖块 稳定 不会掉落时给你一个数组 hits ,这是需要依次消除砖块的位置。每当消除hits[i] = (rowi, coli) 位置上的砖块时,对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这一消除操作而掉落。一旦砖块掉落,它会立即从网格中消失(即,它不会落在其他稳定的砖块上)。返回一个数组 resul..

2021-01-16 21:25:00 138

原创 947. 移除最多的同行或同列石头

947. 移除最多的同行或同列石头n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。给你一个长度为 n 的数组 stones ,其中 stones[i] = [xi, yi] 表示第 i 块石头的位置,返回 可以移除的石子 的最大数量。示例 1:输入:stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]]输出:5解释:一种移除 5 块石.

2021-01-15 20:04:29 132

原创 面试题 01.05. 一次编辑

面试题 01.05. 一次编辑字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例1:输入:first = "pale"second = "ple"输出: True示例2:输入:first = "pales"second = "pal"输出: False基本思路:双指针,因为最多只有一个字符不同,我们我可以分别从前向后和从后往前遍历,根据遍历到的位置判断是...

2021-01-14 23:08:35 105

原创 72. 编辑距离

72. 编辑距离给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')示例2:...

2021-01-14 23:04:13 150

原创 c++ string 字符串结尾是否以‘\0‘区分

1.先说测试结果,string 并不是以‘\0'作为字符串结尾的标志,但是经试验,字符串可以越界访问a[3],并且字符串的结尾确实是'\0';实验环境:vs2017,win 10,c++ 17 { //string a("abcd", 3); string a = "abs"; cout << "---------------------" << endl; cout << a.capacity() << endl; //15

2021-01-14 16:20:59 4094

原创 auto之[k,v]报错问题

1.报错的根本原因是使用的c++标准不对,c++17扩展了auto的推断范围auto x1={1,2}; //std::initializer_list<int>类型auto [k,v]:m ; //m为map类型2.在vs上修改流程如下:项目->属性->配置属性->c/c+±>语言->c++语言标准->c++17...

2021-01-13 22:35:38 1679

原创

待定1.判断图是否有环并查集的问题 拓扑排序

2021-01-13 22:24:43 71

原创 拓扑排序

一.基本定义1.定义:拓扑排序:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。2.简单例子:上述拓扑排序的顺序(不唯一):1,2,3,4.

2021-01-13 22:20:18 2560

原创 1203. 项目管理

1203. 项目管理公司共有n个项目和 m个小组,每个项目要不无人接手,要不就由 m 个小组之一负责。group[i] 表示第i个项目所属的小组,如果这个项目目前无人接手,那么group[i] 就等于-1。(项目和小组都是从零开始编号的)小组可能存在没有接手任何项目的情况。请你帮忙按要求安排这些项目的进度,并返回排序后的项目列表:同一小组的项目,排序后在列表中彼此相邻。项目之间存在一定的依赖关系,我们用一个列表 beforeItems来表示,其中beforeItems...

2021-01-13 21:59:27 134

原创 684. 冗余连接

684. 冗余连接在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v],满足u < v,表示连接顶点u和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边[u, v] 应满足相...

2021-01-13 19:59:42 77

原创 440. 字典序的第K小数字

440. 字典序的第K小数字给定整数n和k,找到1到n中字典序第k小的数字。注意:1 ≤ k ≤ n ≤ 10^9。示例 :输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。基本思路:从树上看,是一个十叉树的前序遍历问题,等价于求从根节点到目标节点遍历距离为k-1的节点。问题转换为求从根节点向前走k-1步到达的节点同层相...

2021-01-11 17:31:00 143

原创 1202. 交换字符串中的元素

1202. 交换字符串中的元素给你一个字符串s,以及该字符串中的一些「索引对」数组pairs,其中pairs[i] =[a, b]表示字符串中的两个索引(编号从 0 开始)。你可以 任意多次交换 在pairs中任意一对索引处的字符。返回在经过若干次交换后,s可以变成的按字典序最小的字符串。示例 1:输入:s = "dcab", pairs = [[0,3],[1,2]]输出:"bacd"解释:交换 s[0] 和 s[3], s = "bcad"交换 s[1] 和 ...

2021-01-11 15:16:14 333

原创 字符串Hash

一.Rabin-Karp 字符串编码 转载自--最长快乐前缀背景知识Rabin-Karp 字符串编码是一种将字符串映射成整数的编码方式,可以看成是一种哈希算法。具体地,假设字符串包含的字符种类不超过∣Σ∣(其中 Σ 表示字符集),那么我们选一个大于等于∣Σ∣ 的整数base,就可以将字符串看成base 进制的整数,将其转换成十进制数后,就得到对应字符的编码。例如给定字符串 s = abcas,其包含的字符种类为 3(即 abc 三种)。我们取base=9...

2021-01-10 22:36:23 190

原创 1392. 最长快乐前缀

1392. 最长快乐前缀快乐前缀是在原字符串中既是非空 前缀也是后缀(不包括原字符串自身)的字符串。给你一个字符串 s,请你返回它的 最长快乐前缀。如果不存在满足题意的前缀,则返回一个空字符串。示例 1:输入:s = "level"输出:"l"解释:不包括 s 自己,一共有 4 个前缀("l", "le", "lev", "leve")和 4 个后缀("l", "el", "vel", "evel")。最长的既是前缀也是后缀的字符串是 "l" 。示例 2:输入:s = .

2021-01-10 22:32:23 215

原创 491. 递增子序列

491. 递增子序列给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明:给定数组的长度不会超过15。数组中的整数范围是[-100,100]。给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。基本思路: v.

2021-01-10 00:16:23 116

原创 最长上升序列问题简单总结

一.最长上升序列基本思路:先排序,然后用动态规划思路解决问题,转移方程:dp[i]=max(dp[i],dp[j]+1) ,if condition二.例题例题1--300. 最长上升子序列,给定一个无序的整数数组,找到其中最长上升子序列的长度。基本思路:对于子序列最值问题,子序列尾部元素是否被选中是一个很重要的隐含状态,它可以帮忙递推下一个的状态,动态规划,dp[i]表示以i为终点的最长上升长度。对于一个严格递增的子序列,当前元素是否能续上,主要是比较当前元素和改子序列的尾部元.

2021-01-09 22:16:47 622

原创 452. 用最少数量的箭引爆气球

452. 用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们..

2021-01-09 22:01:34 69

原创 646. 最长数对链

646. 最长数对链给出n个数对。在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当b < c时,数对(c, d)才可以跟在(a, b)后面。我们用这种形式来构造一个数对链。给定一个数对集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。示例:输入:[[1,2], [2,3], [3,4]]输出:2解释:最长的数对链是 [1,2] -> [3,4]提示:...

2021-01-09 21:45:03 136

原创 剑指 Offer 56 - I. 数组中数字出现的次数

剑指 Offer 56 - I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:2 <= nums.length <= 10000..

2021-01-09 19:06:56 80

原创 剑指 Offer 64. 求1+2+…+n

剑指 Offer 64. 求1+2+…+n求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出:6示例 2:输入: n = 9输出:45限制:1 <= n<= 10000基本思路:不能用循环语句只能使用递归;但是用递归时,又不能用if等判断语句,可以借用逻辑运算的短路效应 int sumNum...

2021-01-09 15:42:09 84

原创 面试题 01.01. 判定字符是否唯一

面试题 01.01. 判定字符是否唯一实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = "leetcode"输出: false示例 2:输入: s = "abc"输出: true限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。基本思路:首先想到的是哈希表,空间复杂度为O(1),但是用到了额外的数据结构;其次想到的是对原数组的排序,,但是时间复杂度为O(nlg(n));最后.

2021-01-09 15:37:14 129

原创 435. 无重叠区间

435. 无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使

2021-01-07 22:48:14 134

原创 剑指 Offer 62. 圆圈中最后剩下的数字

剑指 Offer 62. 圆圈中最后剩下的数字0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出:3示例 2:输入: n = 10, m = 17输出:2限制:1 <= n&lt...

2021-01-06 18:27:02 140

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除