✅ 669. 修剪二叉搜索树

https://leetcode-cn.com/problems/trim-a-binary-search-tree

描述

  1. 给定一个二叉搜索树,同时给定最小边界和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。
  2. 示例 1:
  3. 输入:
  4. 1
  5. / \
  6. 0 2
  7. L = 1
  8. R = 2
  9. 输出:
  10. 1
  11. \
  12. 2
  13. 示例 2:
  14. 输入:
  15. 3
  16. / \
  17. 0 4
  18. \
  19. 2
  20. /
  21. 1
  22. L = 1
  23. R = 3
  24. 输出:
  25. 3
  26. /
  27. 2
  28. /
  29. 1
  30. 来源:力扣(LeetCode
  31. 链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree
  32. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

思路:是递归

  1. public TreeNode trimBST(TreeNode root, int L, int R) {
  2. if (root == null)
  3. return root;
  4. //下面两个if相当于删除不满足要求的节点
  5. if (root.val < L)
  6. return trimBST(root.right, L, R);//返回修剪过的右子树。抱有一丝丝期望,希望右子树能够满足要求,因为右子树的值大于当前根节点的值
  7. if (root.val > R)
  8. return trimBST(root.left, L, R);//返回修剪过的左子树,抱有一丝丝期望,希望左子树能够满足要求,因为左子树的值小于当前根节点的值
  9. //处理正常的节点
  10. root.left = trimBST(root.left, L, R);
  11. root.right = trimBST(root.right, L, R);
  12. return root;
  13. }

写递归一定要把每步做什么,终止条件考虑清楚,思路一旦不清楚绕进去就再也出不来了

java


py

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution:
  8. def trimBST(self, root: TreeNode, L: int, R: int) -> TreeNode:
  9. if root == None: return None
  10. if (root.val < L) : return self.trimBST(root.right, L, R)
  11. if (root.val > R) : return self.trimBST(root.left, L, R)
  12. # for the normal ones
  13. root.left = self.trimBST(root.left, L, root.val)# todo 为啥可以:把R 改为root.val
  14. root.right = self.trimBST(root.right, root.val, R)
  15. return root
  16. '''
  17. 执行用时 :
  18. 60 ms
  19. , 在所有 Python3 提交中击败了
  20. 46.49%
  21. 的用户
  22. 内存消耗 :
  23. 17.5 MB
  24. , 在所有 Python3 提交中击败了
  25. 30.33%
  26. 的用户
  27. '''

✅ 883. 三维形体投影面积

https://leetcode-cn.com/problems/projection-area-of-3d-shapes

https://leetcode-cn.com/problems/projection-area-of-3d-shapes/solution/kan-dong-ti-mu-hen-zhong-yao-zhi-hou-jiu-shi-x-y-z/

描述

  1.  N * N 的网格中,我们放置了一些与 xyz 三轴对齐的 1 * 1 * 1 立方体。
  2. 每个值 v = grid[i][j] 表示个正方体叠放在单元格 (i, j) 上。
  3. 现在,我们查看这些立方体在 xyyz  zx 平面上的投影。
  4. 投影就像影子,将三维形体映射到一个二维平面上。
  5. 在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。
  6. 返回所有三个投影的总面积。
  7.  
  8. 示例 1
  9. 输入:[[2]]
  10. 输出:5
  11. 示例 2
  12. 输入:[[1,2],[3,4]]
  13. 输出:17
  14. 解释:
  15. 这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。
  16. 示例 3
  17. 输入:[[1,0],[0,2]]
  18. 输出:8
  19. 示例 4
  20. 输入:[[1,1,1],[1,0,1],[1,1,1]]
  21. 输出:14
  22. 示例 5
  23. 输入:[[2,2,2],[2,1,2],[2,2,2]]
  24. 输出:21
  25.  
  26. 提示:
  27. 1 <= grid.length = grid[0].length <= 50
  28. 0 <= grid[i][j] <= 50
  29. 来源:力扣(LeetCode
  30. 链接:https://leetcode-cn.com/problems/projection-area-of-3d-shapes
  31. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

正视图:每一行最大值之和;

侧视图:每一列最大值之和;

俯视图:柱子个数;

执行用时 : 56 ms, 在Projection Area of 3D Shapes的Python3提交中击败了90.85% 的用户

内存消耗 : 13 MB, 在Projection Area of 3D Shapes的Python3提交中击败了94.12% 的用户

  1. class Solution:
  2. def projectionArea(self, grid):
  3. 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

  1. int projectionArea(int** grid, int gridSize, int* gridColSize){
  2. int i, j, xy = 0, xz = 0, yz = 0, row_max[gridSize], col_max[*gridColSize];
  3. //init the row soldiers and col soldiers to 0
  4. memset(row_max, 0, gridSize * sizeof(int));
  5. memset(col_max, 0, *gridColSize * sizeof(int));
  6. for (i = 0; i < gridSize; i++) {
  7. for (j = 0; j < *gridColSize; j++) {
  8. row_max[i] = row_max[i] > grid[i][j] ? row_max[i] : grid[i][j];
  9. col_max[j] = col_max[j] > grid[i][j] ? col_max[j] : grid[i][j];
  10. xy = grid[i][j] > 0 ? xy + 1 : xy;
  11. }
  12. }
  13. //finish all count, then we count all size on yz and xz
  14. for (int k = 0; k < gridSize; k++) {
  15. yz += row_max[k];
  16. }
  17. for (int k = 0; k < *gridColSize; k++) {
  18. xz += col_max[k];
  19. }
  20. return xy + xz + yz;
  21. }
  22. /*执行用时 :
  23. 24 ms
  24. , 在所有 C 提交中击败了
  25. 14.81%
  26. 的用户
  27. 内存消耗 :
  28. 7.2 MB
  29. , 在所有 C 提交中击败了
  30. 80.00%
  31. 的用户*/

py

  1. class Solution:
  2. def projectionArea(self, grid):
  3. 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

  1. map() 会根据提供的函数对指定序列做映射。
  2. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
  3. 语法
  4. map() 函数语法:
  5. map(function, iterable, ...)
  6. 参数
  7. function -- 函数
  8. iterable -- 一个或多个序列
  9. 返回值
  10. Python 2.x 返回列表。
  11. Python 3.x 返回迭代器。
  12. 实例
  13. 以下实例展示了 map() 的使用方法:
  14. >>>def square(x) : # 计算平方数
  15. ... return x ** 2
  16. ...
  17. >>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
  18. [1, 4, 9, 16, 25]
  19. >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
  20. [1, 4, 9, 16, 25]
  21. # 提供了两个列表,对相同位置的列表数据进行相加
  22. >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
  23. [3, 7, 11, 15, 19]

python zip(*grid) ??

todo

  1. grid = [[1,2],[3,4]]
  2. b = zip(grid) # [([1, 2],), ([3, 4],)] todo watch me!
  3. print(b)
  4. c = zip(*grid)
  5. print(c) # [(1, 3), (2, 4)]

✅ 929. 独特的电子邮件地址

https://leetcode-cn.com/problems/unique-email-addresses

描述

  1. 每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。
  2. 例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。
  3. 除了小写字母,这些电子邮件还可能包含 '.' '+'
  4. 如果在电子邮件地址的本地名称部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"alice.z@leetcode.com” 和 “alicez@leetcode.com” 会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)
  5. 如果在本地名称中添加加号('+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如 m.y+name@email.com 将转发到 my@email.com。 (同样,此规则不适用于域名。)
  6. 可以同时使用这两个规则。
  7. 给定电子邮件列表 emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?
  8.  
  9. 示例:
  10. 输入:["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
  11. 输出:2
  12. 解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。
  13. 来源:力扣(LeetCode)
  14. 链接:https://leetcode-cn.com/problems/unique-email-addresses
  15. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

替换 . 为 空白。

定位到 + 以及 定位 到 @, 我们删除这两个东西 之间的东西。

经历上面2 步骤,我们将结果 加入 set,

最后返回 set.size()


re

流和正则表达式 毁天灭地。。。 todo 0223 学习 流和正则表达式

  1. class Solution { public int numUniqueEmails(String[] emails) {
  2. return (int) Arrays.stream(emails).map(a1 -> {
  3. a1 = a1.replaceAll("\+.*@", "@");
  4. while (a1.matches(".*\..*@.*")) {//只要循环中的a1 @号前面部分里面有.,就替换为空
  5. a1 = a1.replaceFirst("\.", "");
  6. }
  7. return a1;
  8. }).distinct().count();
  9. }

学习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

  1. class Solution {
  2. public int numUniqueEmails(String[] emails) {
  3. if (emails.length < 1) return 0;
  4. Set<String> myset = new HashSet<>();
  5. for (String email: emails) {
  6. String[] splitted = email.split("@");
  7. String firstPart = splitted[0];
  8. String tmp = "";
  9. for(int i = 0; i < firstPart.length(); i++) {
  10. if (firstPart.charAt(i) == '.') continue;
  11. if (firstPart.charAt(i) == '+') break;
  12. tmp += firstPart.charAt(i);
  13. }
  14. tmp += "@" + splitted[1];
  15. myset.add(tmp);
  16. }
  17. return myset.size();
  18. }
  19. }
  20. /*执行用时 :
  21. 45 ms
  22. , 在所有 Java 提交中击败了
  23. 9.15%
  24. 的用户
  25. 内存消耗 :
  26. 41.9 MB
  27. , 在所有 Java 提交中击败了
  28. 5.26%
  29. 的用户*/

lc 0223的更多相关文章

  1. 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。

    laviewpbt  2014.8.4 编辑 Email:laviewpbt@sina.com   QQ:33184777 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...

  2. “LC.exe”错误

    错误“LC.exe”已退出,代码为 -1. 可能的原因是: 这个第三方组件是个商业组件,他在组件的主使用类定义了 LicenseProvider(typeof(LicFileLicenseProvid ...

  3. 解决VS下“LC.exe已退出,代码为-1”问题

    今天使用VS2015开发一个Winform程序,手一抖拖错了一个第三方控件,然后将其去掉并删除相关的引用,结果导致了LC.exe错误:"Lc.exe已退出,代码为-1 ". 经过上 ...

  4. 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析

    许可证编译器 (Lc.exe) 的作用是读取包含授权信息的文本文件,并产生一个可作为资源嵌入到公用语言运行库可执行文件中的 .licenses 文件. 在使用第三方类库时,经常会看到它自带的演示程序中 ...

  5. Lc.exe已退出,代码为-1

    编译项目,出现提示"Lc.exe已退出,代码为-1" .   解决办法: 意思就是把licenses.licx这个文件里的内容删除,但是文件还在(此时是个空文件),发生这个问题的原 ...

  6. "LC.exe" exited with code -1 错误

    当打开一个VS程序时出现"LC.exe" exited with code -1错误,解决方法是: 删除licenses.licx文件即可

  7. LC.exe exited with code -1

    昨天从win8.1升级到win10之后, 一切还算顺利, 就是升级时间比较长. 但是快下班的时候 遇到一个问题, 是之前在win8.1上没遇到的, 首先代码win8.1 vs2013 上跑的时候一切正 ...

  8. vs2012编译出错“LC.exe”已退出解决方法

    “LC.exe”已退出,代码为 -1. 解决方法: 将项目Properties下的licenses.licx文件删除,重新编译即可.

  9. TT付款方式、前TT和后TT、LC信用证+TT付款方式

    TT付款方式是以外汇现金方式结算,由您的客户将款项汇至贵公司指定的外汇银行账号内,可以要求货到后一定期限内汇款. .T/T属于商业信用,也就是说付款的最终决定权在于客户.T/T分预付,即期和远期.现在 ...

随机推荐

  1. PHP无法获取.env文件设置的值

    EGPCS指代的是什么?     指的是可以从服务器配置和请求的信息中获取的信息,它包括了environment(环境).GET.POST.cookie.server,对应的全局数组:$_ENV.$_ ...

  2. try catch 语句中有return 的各类情况

    在牛客上做java题时遇到过多到关于try catch语句的问题,看了很多答案解析,在这里记录一下. 首先给出一道题目: 下面代码的运行结果为? A.catch语句块 和是43 B.编译异常 C.fi ...

  3. java基础(八)之函数的复写/重写(override)

    复写的意思就是子类对父类的修改. 复写的条件: 1.在具有父子类关系的两个类当中:2.父类和子类各有一个函数,这两个函数的定义保持一致(返回值类型.函数名.参数列表) 还是老样子,3个文件来说明. P ...

  4. bitset 位运算

    1. 判断一个数是否是2的方幂n > 0 && ((n & (n - 1)) == 0 ) 解释((n & (n-1)) == 0): 如果A&B==0, ...

  5. 分享链接在QQ内总是被多人举报怎么办,域名防红的方案

    背景 相信大家经常会遇到一个头疼的问题就是,自己的推广链接会因多人投诉举报导致链接在QQ内转发分享会被QQ管家拦截,用户无法打开访问的问题. 那么当大家遇到这个问题的时候应该怎么办呢?不用急,下面分享 ...

  6. hdu 4289 dinic模板

    题意:有N个城市,现在城市S出现了一伙歹徒,他们想运送一些炸弹到D城市,不过警方已经得到了线报知道他们的事情,不过警察不知道他们所在的具体位置,所以只能采取封锁城市的办法来阻断暴徒,不过封锁城市是需要 ...

  7. gulp 常用方法 任务 插件

    执行gulp 任务 gulp taskname (default任务不输入名称亦可:gulp) var gulp = require("gulp"); gulp.task(&quo ...

  8. 【资源分享】RPG Maker 2000/2003 简体中文版

    *----------------------------------------------[下载区]----------------------------------------------* ...

  9. 2019冬季PAT甲级第四题

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; typedef struct node{ ...

  10. 【HTTP与HTTPS的区别】

    目录 一.HTTP和HTTPS的基本概念 二.HTTP与HTTPS有何区别 三.HTTP与HTTPS的工作原理 四.HTTPS的优缺点 五.HTTP切换至HTTPS "超文本传输协议,即HT ...