lc 0223
✅ 669. 修剪二叉搜索树
https://leetcode-cn.com/problems/trim-a-binary-search-tree
描述
给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。
示例 1:
输入:
1
/ \
0 2
L = 1
R = 2
输出:
1
\
2
示例 2:
输入:
3
/ \
0 4
\
2
/
1
L = 1
R = 3
输出:
3
/
2
/
1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
思路:是递归
public TreeNode trimBST(TreeNode root, int L, int R) {
if (root == null)
return root;
//下面两个if相当于删除不满足要求的节点
if (root.val < L)
return trimBST(root.right, L, R);//返回修剪过的右子树。抱有一丝丝期望,希望右子树能够满足要求,因为右子树的值大于当前根节点的值
if (root.val > R)
return trimBST(root.left, L, R);//返回修剪过的左子树,抱有一丝丝期望,希望左子树能够满足要求,因为左子树的值小于当前根节点的值
//处理正常的节点
root.left = trimBST(root.left, L, R);
root.right = trimBST(root.right, L, R);
return root;
}
写递归一定要把每步做什么,终止条件考虑清楚,思路一旦不清楚绕进去就再也出不来了
java
py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def trimBST(self, root: TreeNode, L: int, R: int) -> TreeNode:
if root == None: return None
if (root.val < L) : return self.trimBST(root.right, L, R)
if (root.val > R) : return self.trimBST(root.left, L, R)
# for the normal ones
root.left = self.trimBST(root.left, L, root.val)# todo 为啥可以:把R 改为root.val
root.right = self.trimBST(root.right, root.val, R)
return root
'''
执行用时 :
60 ms
, 在所有 Python3 提交中击败了
46.49%
的用户
内存消耗 :
17.5 MB
, 在所有 Python3 提交中击败了
30.33%
的用户
'''
✅ 883. 三维形体投影面积
https://leetcode-cn.com/problems/projection-area-of-3d-shapes
描述
在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。
每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。
现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影。
投影就像影子,将三维形体映射到一个二维平面上。
在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。
返回所有三个投影的总面积。
示例 1:
输入:[[2]]
输出:5
示例 2:
输入:[[1,2],[3,4]]
输出:17
解释:
这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。
示例 3:
输入:[[1,0],[0,2]]
输出:8
示例 4:
输入:[[1,1,1],[1,0,1],[1,1,1]]
输出:14
示例 5:
输入:[[2,2,2],[2,1,2],[2,2,2]]
输出:21
提示:
1 <= grid.length = grid[0].length <= 50
0 <= grid[i][j] <= 50
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/projection-area-of-3d-shapes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
正视图:每一行最大值之和;
侧视图:每一列最大值之和;
俯视图:柱子个数;
执行用时 : 56 ms, 在Projection Area of 3D Shapes的Python3提交中击败了90.85% 的用户
内存消耗 : 13 MB, 在Projection Area of 3D Shapes的Python3提交中击败了94.12% 的用户
class Solution:
def projectionArea(self, grid):
return sum([sum(map(max, grid)), sum(map(max, zip(*grid))), sum(v > 0 for row in grid for v in row)])
my understanding
c
int projectionArea(int** grid, int gridSize, int* gridColSize){
int i, j, xy = 0, xz = 0, yz = 0, row_max[gridSize], col_max[*gridColSize];
//init the row soldiers and col soldiers to 0
memset(row_max, 0, gridSize * sizeof(int));
memset(col_max, 0, *gridColSize * sizeof(int));
for (i = 0; i < gridSize; i++) {
for (j = 0; j < *gridColSize; j++) {
row_max[i] = row_max[i] > grid[i][j] ? row_max[i] : grid[i][j];
col_max[j] = col_max[j] > grid[i][j] ? col_max[j] : grid[i][j];
xy = grid[i][j] > 0 ? xy + 1 : xy;
}
}
//finish all count, then we count all size on yz and xz
for (int k = 0; k < gridSize; k++) {
yz += row_max[k];
}
for (int k = 0; k < *gridColSize; k++) {
xz += col_max[k];
}
return xy + xz + yz;
}
/*执行用时 :
24 ms
, 在所有 C 提交中击败了
14.81%
的用户
内存消耗 :
7.2 MB
, 在所有 C 提交中击败了
80.00%
的用户*/
py
class Solution:
def projectionArea(self, grid):
return sum([sum(map(max, grid)), sum(map(max, zip(*grid))), sum(v > 0 for row in grid for v in row)])
py map
??
https://www.runoob.com/python/python-func-map.html
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
语法
map() 函数语法:
map(function, iterable, ...)
参数
function -- 函数
iterable -- 一个或多个序列
返回值
Python 2.x 返回列表。
Python 3.x 返回迭代器。
实例
以下实例展示了 map() 的使用方法:
>>>def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
python zip(*grid)
??
todo
grid = [[1,2],[3,4]]
b = zip(grid) # [([1, 2],), ([3, 4],)] todo watch me!
print(b)
c = zip(*grid)
print(c) # [(1, 3), (2, 4)]
✅ 929. 独特的电子邮件地址
https://leetcode-cn.com/problems/unique-email-addresses
描述
每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。
例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。
除了小写字母,这些电子邮件还可能包含 '.' 或 '+'。
如果在电子邮件地址的本地名称部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"alice.z@leetcode.com” 和 “alicez@leetcode.com” 会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)
如果在本地名称中添加加号('+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如 m.y+name@email.com 将转发到 my@email.com。 (同样,此规则不适用于域名。)
可以同时使用这两个规则。
给定电子邮件列表 emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?
示例:
输入:["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
输出:2
解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-email-addresses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
替换 .
为 空白。
定位到 +
以及 定位 到 @
, 我们删除这两个东西 之间的东西。
经历上面2 步骤,我们将结果 加入 set,
最后返回 set.size()
re
流和正则表达式 毁天灭地。。。 todo 0223 学习 流和正则表达式
class Solution { public int numUniqueEmails(String[] emails) {
return (int) Arrays.stream(emails).map(a1 -> {
a1 = a1.replaceAll("\+.*@", "@");
while (a1.matches(".*\..*@.*")) {//只要循环中的a1 @号前面部分里面有.,就替换为空
a1 = a1.replaceFirst("\.", "");
}
return a1;
}).distinct().count();
}
学习java 流
Java 8 Stream.distinct() 列表去重示例
https://blog.csdn.net/haiyoung/article/details/80934467
在这篇文章里,我们将提供Java8 Stream distinct()示例。 distinct()返回由该流的不同元素组成的流。distinct()是Stream接口的方法。distinct()使用hashCode()和equals()方法来获取不同的元素。因此,我们的类必须实现hashCode()和equals()方法。如果distinct()正在处理有序流,那么对于重复元素,将保留以遭遇顺序首先出现的元素,并且以这种方式选择不同元素是稳定的。在无序流的情况下,不同元素的选择不一定是稳定的,是可以改变的。distinct()执行有状态的中间操作。在有序流的并行流的情况下,保持distinct()的稳定性是需要很高的代价的,因为它需要大量的缓冲开销。如果我们不需要保持遭遇顺序的一致性,那么我们应该可以使用通过BaseStream.unordered()方法实现的无序流。
java
class Solution {
public int numUniqueEmails(String[] emails) {
if (emails.length < 1) return 0;
Set<String> myset = new HashSet<>();
for (String email: emails) {
String[] splitted = email.split("@");
String firstPart = splitted[0];
String tmp = "";
for(int i = 0; i < firstPart.length(); i++) {
if (firstPart.charAt(i) == '.') continue;
if (firstPart.charAt(i) == '+') break;
tmp += firstPart.charAt(i);
}
tmp += "@" + splitted[1];
myset.add(tmp);
}
return myset.size();
}
}
/*执行用时 :
45 ms
, 在所有 Java 提交中击败了
9.15%
的用户
内存消耗 :
41.9 MB
, 在所有 Java 提交中击败了
5.26%
的用户*/
lc 0223的更多相关文章
- 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。
laviewpbt 2014.8.4 编辑 Email:laviewpbt@sina.com QQ:33184777 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...
- “LC.exe”错误
错误“LC.exe”已退出,代码为 -1. 可能的原因是: 这个第三方组件是个商业组件,他在组件的主使用类定义了 LicenseProvider(typeof(LicFileLicenseProvid ...
- 解决VS下“LC.exe已退出,代码为-1”问题
今天使用VS2015开发一个Winform程序,手一抖拖错了一个第三方控件,然后将其去掉并删除相关的引用,结果导致了LC.exe错误:"Lc.exe已退出,代码为-1 ". 经过上 ...
- 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析
许可证编译器 (Lc.exe) 的作用是读取包含授权信息的文本文件,并产生一个可作为资源嵌入到公用语言运行库可执行文件中的 .licenses 文件. 在使用第三方类库时,经常会看到它自带的演示程序中 ...
- Lc.exe已退出,代码为-1
编译项目,出现提示"Lc.exe已退出,代码为-1" . 解决办法: 意思就是把licenses.licx这个文件里的内容删除,但是文件还在(此时是个空文件),发生这个问题的原 ...
- "LC.exe" exited with code -1 错误
当打开一个VS程序时出现"LC.exe" exited with code -1错误,解决方法是: 删除licenses.licx文件即可
- LC.exe exited with code -1
昨天从win8.1升级到win10之后, 一切还算顺利, 就是升级时间比较长. 但是快下班的时候 遇到一个问题, 是之前在win8.1上没遇到的, 首先代码win8.1 vs2013 上跑的时候一切正 ...
- vs2012编译出错“LC.exe”已退出解决方法
“LC.exe”已退出,代码为 -1. 解决方法: 将项目Properties下的licenses.licx文件删除,重新编译即可.
- TT付款方式、前TT和后TT、LC信用证+TT付款方式
TT付款方式是以外汇现金方式结算,由您的客户将款项汇至贵公司指定的外汇银行账号内,可以要求货到后一定期限内汇款. .T/T属于商业信用,也就是说付款的最终决定权在于客户.T/T分预付,即期和远期.现在 ...
随机推荐
- Oracle使用记录
1.连接数据库的方式 sqlplus system/system@127.0.0.1:1521/orcl #远程用户名密码连接 sqlplus dbsnmp/oracle; #本地用户名密码连接 sq ...
- springmvc、springboot 参数校验
参数校验在项目中是必不可少的,不仅前端需要校验,为了程序的可靠性,后端也需要对参数进行有效性的校验.下面将介绍在springmvc或springboot项目中参数校验的方法 准备工作: 引入校验需要用 ...
- Java中的门面设计模式及如何用代码实现
门面设计模式又叫外观设计模式,其核心思想正如其字面意思,向用户提供一个门户,用户只需要访问这个门户来获取他们想要的数据,无需管理这个门户内部的构成,也无需知道里面的运行流程等等,对于开发者来说,使用门 ...
- JS高级---案例贪吃蛇,把封装的函数移动到js文件中
案例贪吃蛇,把封装的函数移动到js文件中 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- opencv:形态学梯度
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- 并发编程Semaphore详解
Semaphore的作用:限制线程并发的数量 位于 java.util.concurrent 下, 构造方法 // 构造函数 代表同一时间,最多允许permits执行acquire() 和releas ...
- Go_Json序列化
1. json介绍 2. json格式说明 3. json序列化 3.1 结构体序列化 package main import ( "fmt" "encoding/jso ...
- MBA 报考
1. 作者:MBA薛老师链接:https://www.zhihu.com/question/277811289/answer/397083199来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...
- 方便的 IcoMoon 图标字体
官网地址:https://icomoon.io/app/#/select 已发现的方便之处: 1.官网已提供大量常用图标字体: 2.可通过 svg 将其转换为 图标字体: 3.不仅可转换,还可自定义编 ...
- laravel执行数据库迁移的过程中出现Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Operation timed out (SQL: select * from information_schema.tables where table_schema = shop and table_name = migrations
向customers表添加字段phone php artisan make:migration add_phone_to_customers_table 问题: 解决方法: 将DB_HOST配置项修改 ...