码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 笔试强训Day11


    T1:二叉树

    链接:二叉树_牛客题霸_牛客网 (nowcoder.com)​​​​​​​s

    题意:给你一颗二叉树,求俩个点的最近公共祖先(LCA)

    因为比较特殊,树是一颗二叉树,二叉树的编号很特殊,学过线段树的都知道,假设当前点是x,那俩个儿子的编号就是2*x和2*x+1,父节点的编号是x/2; 

    所以求LCA就只要让一个点往父节点跳(每次选编号最大的点跳)

    时间复杂度:O(logN)

    1. #include
    2. using namespace std;
    3. int a,b;
    4. int main()
    5. {
    6. while(cin>>a>>b){
    7. while(a!=b){
    8. if(a>b)a/=2;
    9. else b/=2;
    10. }
    11. cout<
    12. }
    13. return 0;
    14. }

     如果题目不是二叉树呢,并且编号不是这么有规律,如下图

    这时阁下应当如何应对呢?

    hhh,我选择掏出打ACM时候用的LCA板子

    1. void dfs(int u, int fa)
    2. {
    3. for (int i = h[u]; ~i; i = ne[i]) {
    4. int j = e[i];
    5. if (j == fa)continue;
    6. dis[j] = dis[u] + 1;
    7. f[j][0] = u;
    8. for (int k = 1; (1 << k) <= dis[j]; k++) {
    9. f[j][k] = f[f[j][k - 1]][k - 1];
    10. }
    11. dfs(j, u);
    12. }
    13. }
    14. int lca(int a, int b)
    15. {
    16. if (dis[a] < dis[b])swap(a, b);
    17. int d = dis[a] - dis[b];
    18. for (int i = 0; d; i++) {
    19. if (d & 1)a = f[a][i];
    20. d /= 2;
    21. }
    22. if (a == b)return a;
    23. for (int i = 21; i >= 0; i--) {
    24. if (f[a][i] != f[b][i]) {
    25. a = f[a][i];
    26. b = f[b][i];
    27. }
    28. }
    29. return f[a][0];
    30. }

    T2:求最大连续bit数

    链接:求最大连续bit数_牛客题霸_牛客网 (nowcoder.com)

    描述

    求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

    数据范围:1≤n≤500000 

    进阶:时间复杂度:O(logn) ,空间复杂度:O(1) 

    1. #include
    2. using namespace std;
    3. int n;
    4. int main()
    5. {
    6. cin>>n;
    7. int ans=0;
    8. int cnt=0;
    9. while(n){
    10. int k=n%2;
    11. if(k==1)cnt++;
    12. else cnt=0;
    13. ans=max(cnt,ans);
    14. n/=2;
    15. }
    16. cout<
    17. return 0;
    18. }
    思想很简单, 取出二进制的每一位,判断是1还是0,是1的话个数+1,否则变为0。然后与ans答案取最大值
  • 相关阅读:
    【Spring】spring管理第三方资源;加载Properties文件
    深入浅出学习透析Nginx服务器的基本原理和配置指南「初级实践篇 」
    【浅学Linux】动态库与静态库的封装与使用
    高性能分布式No SQL数据库Aerospike——常用工具使用
    基于yolov5s+bifpn实践隧道裂缝裂痕检测
    C++ STL进阶与补充(map/multimap容器)
    Netty架构
    100ms的延迟让亚马逊损失1%销量,如何快速降低网站延迟?
    Node.js 实战 第2章 Node 编程基础 2.3 用module.exports 微调模块的创建
    研发过程中的文档管理与工具
  • 原文地址:https://blog.csdn.net/m0_64263546/article/details/133514825
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号