首页 > 编程语言 >使用Python做笔试编程题的注意事项

使用Python做笔试编程题的注意事项

时间:2023-08-14 12:56:46浏览次数:64  
标签:取模 编程 Java Python cache 笔试 PriorityQueue

上研究生这一两年一直在用Python,习惯了Python的库函数。由于Java语法严格又比较复杂,容易扰乱算法思路,并且太久没用以前擅长的C++,最近笔试一直首选Python。Python在笔试编程题中具有简洁易读、易于操作和大量的库支持的优点。然而,需要注意Python的执行效率,否则只要题目卡边界和时间就很难100%AC。根据笔试情况,总结了一些笔试注意事项。

优势

  • 基础类型丰富
    • int 天然支持大整数
    • string 类型支持 slice、反转等,语法灵活
    • dict 可作为哈希
  • 语法简洁,动态类型
    • 定义变量不用指定类型,更关注算法
    • mapzip、列表表达式等减少代码量
    • 支持多返回值
  • 特殊函数
    • eval 表达式求值
    • cache装饰器快速实现记忆化搜索 ,无序额外逻辑

劣势

  • 执行速度慢!!!

  • 不支持排序集合、排序map,其中 OrderedDict 是有序字典,类似于Java的LinkedHashMap

  • CPython解释器限制最大递归深度为1000

笔试遇到问题

  1. for循环超时

    去掉if判断:根据条件,改用max、min等函数

    合并多行语句:例如对于每次结果取模,直接在计算时取模,而不是额外判断或者先更新dp[i]再取模

  2. 使用PriorityQueue、heapq超时

    queue 库有线程同步操作,执行比较慢(参考我的博客第8条分析)。先考虑替换heapq(文远知行第三题通过92%),实在不行换语言吧。

    Java 优先队列,使用Lambda匿名函数,注意返回类型为 int

    PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2)->(o1[1]-o2[1]));
    
  3. RuntimeError: maximum recursion depth exceeded

    参考python递归次数过多,导致报错或者溢出

    import sys                    # 导入sys模块
    sys.setrecursionlimit(10000)  # 将默认的递归深度修改为10000
    
  4. 搜索需要记忆化

    使用cache装饰器

    from functools import cache
    
    // 加在需要记忆化的函数上,参数务必为可哈希类型
    @cache
    def dfs(u, flag=False, fa=-1):
        pass
    

标签:取模,编程,Java,Python,cache,笔试,PriorityQueue
From: https://www.cnblogs.com/izcat/p/17628332.html

相关文章

  • 认识Spring AOP 面向切面编程
    一.什么是SpringAOP关于什么是SpringAOP.当我翻到官方文档的时候也是一惊LetusbeginbydefiningsomecentralAOPconceptsandterminology.ThesetermsarenotSpring-specific…unfortunately,AOPterminologyisnotparticularlyintuitive;however,itwoul......
  • 《Java编程思想第四版》学习笔记12
    对于一个复杂的对象,构建器的调用遵照下面的顺序:(1)调用基础类构建器。这个步骤会不断重复下去,首先得到构建的是分级结构的根部,然后是下一个衍生类,等等。直到抵达最深一层的衍生类。(2)按声明顺序调用成员初始化模块。(3)调用衍生构建器的主体。          ......
  • Python全栈工程师(40:Web框架Django基础)
    Python的WEB框架有Django、Tornado、Flask等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。基础入门教程:http://www.runoob.com/django/django-tutorial.html安装:环境搭建与pycharm的配置django安装及MySQL数据库配......
  • Spring 响应式编程-读书笔记
    本文为《Spring响应式编程》的读书笔记,响应式技术栈可以创建极其高效、易于获取且具有回弹性的端点,同时响应式可以容忍网络延迟,并以影响较小的方式处理故障。响应式微服务还可以隔离慢速事务并加速速度最快的事务。通过本书可以学到以下内容:响应式编程基本原则和响应式流(Reactive......
  • Python学了基本语法 下一步该学什么 ?
    刚入门Python,学习了基本语法后,你可以开始编写简单的程序了。接下来,你可以学习Python的标准库和第三方库,掌握更多的编程技巧和知识,提高自己的编程能力。同时,也可以通过实践项目来巩固所学知识,提高自己的实战能力。学习Python基本语法是入门的第一步,接下来你可以考虑以下几个方向:1......
  • 米哈游笔试概率题(阅读理解!!!)
    第三道题考试没做出来,今天网上找到原题描述,才发现是理解有误。题意题目背景为元神和星穹铁道的抽卡系统,我也不玩,根本不懂什么大保底机制。务必理解:当抽到常驻5星后,触发了大保底机制,以后每抽一发有p的概率抽到当期5星,其余的1-p概率不出5星。再结合题意,一定要明白:89次未抽中,必然......
  • python模块之sys
    sys模块提供许多函数和变量来处理Python运行时环境的不同部分处理命令行参数在解释器启动后,argv列表包含了传递给脚本的所有参数,列表的第一个元素为脚本自身的名称.处理模块path列表是一个由目录名构成的列表,Python从中查找扩展模块(Python源模块,编译模块,或者二进......
  • python'__init__.py'文件中'__all__'的作用
    以前我以为__all__的作用是限制导出哪些函数或者变量,后来发现只有在fromxximport*语句中才是这样,而importxxx是不起作用的,后者是可以使用模块中的所有全局变量和函数的.例如下面的__init__.py文件:__all__=['brysj2','__author__']brysj2=88a1=99__author__......
  • 【linux编程】用户态文件系统FUSE
       参考资料1. 自制文件系统——02开发者的福音,FUSE文件系统......
  • python中的__main__.py文件
    在Python中,__main__.py文件在几个方面发挥作用:使目录可执行:当你有一个目录(或称为包)并希望能够像执行脚本那样运行它时,__main__.py文件会被调用。例如,如果你有一个名为mypackage的目录,它包含一个__main__.py文件,那么你可以通过以下方式运行它:python-mmypackage在上......