LeetCode-16
934. 最短的桥
1 | class Solution { |
和之前写的一道题有点像,827. 最大人工岛
827. 最大人工岛
我先dfs找到所有连通子图和包围岛的0点,然后找这些点中有无同时包围多个岛的,把他们的面积加起来取最大值
这道题也可以使用相同的方法,找到每个岛屿的边界点,然后计算边界点的距离(只有两个岛,两个岛之间肯定是可以连通的,且不管使用那条途径,最短距离一定是 $ abs(x_1 - x_2) + abs(y_1-y_2)-1 $)
看答案
1 | class Solution { |
对于一个为1的点,先dfs吧所有在同一个岛屿内的1放入队列q中
对于队列中的每个节点,把包围他们的0入队,反复操作,直到遇到1
也就是在岛屿附近画圈,遇到1对应的圈数就是结果。
915. 分割数组
1 | class Solution { |
没想到会这么慢
优化1
- max数组没必要
- 不用vector
1 | class Solution { |
1768. 交替合并字符串
1 | class Solution { |
1235. 规划兼职工作
1 | class Solution { |
开始想用贪心,给时薪排序,一次选择,但是发现这样得到的不是profit最大,而是工作时间更短的情况下的收益最大
看了答案后自己写的,发现是一个非常典型的dp问题
官方题解
1 | class Solution { |
复习 769. 最多能完成排序的块
这个题之前没有看太懂,现在再看一次
题解1
1 | class Solution { |
这个题解比官方的好理解一点,j比i落后一点
当i,j区间内拥有i,j两个数时,且i是最大值,j的最小值,这时对这个区间排序,可以让max = i到i的位置,min = j到j的位置
也就是说i,j区间内所有数字都找到了自己的位置。这就找到了一个划分,重复这样做,就可以找到所有区间
题解2
1 | class Solution { |
以数据
单调栈
单调栈:分为单调递增和单调递减栈(栈内元素成递增或者递减性)
-
单调栈的作用
- 把序列中每个元素放到单调栈中进行维护就可以在 O(n) 的时间复杂度内求出区间每个元素为最大值/最小值时
-
单调栈的性质如下:
- 元素加入栈前会把栈顶破坏单调性的元素删除
- 一般使用单调栈的题目具有以下的两点
- 离自己最近(栈的后进先出的性质)
- 比自己大(小)、高(低)
板子:
1 | stack<int> stk; |
1822. 数组元素积的符号
1 | class Solution { |
比较简单,就是数数的问题