Algorithm

字典序排数

  • What 给定一个整数n,返回从1到n的字典顺序,例如,给定 n =13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] ,尽可能的优化算法的时间复杂度和空间复杂度。

  • How 问题的关键在于理清“词典顺序”是什么样的,词典顺序就是10比2靠前,101比11靠前,110比11靠后。做法大致顺序:

  • 1.如果一个数乘以十以后没有超过n,那它后面紧挨着的应该是它的十倍,比如1,10,100。
  • 2.如果不满足1,那就应该是直接加一,比如n为13的时候,前一个数为12,120超过了n,那接着的应该是13。但是这里要注意如果前一个数的个位已经是9或者是它就是n了,那就不能加一了,比如 n = 25,前一个数为19,下一个数应该为2而不是19+1=20。25的下一个也没有26了。
  • 3.如果不满足2,比如19后面应该接2而不是20,这时候应该将19除以10再加一,比如n=500,399的下一个应该是4,那就是除以十,个位还是9,继续除以10,得到3,加一得到4。
  • Key Codes
  1. class Solution {
  2. public List<Integer> lexicalOrder(int n) {
  3. List<Integer> list = new ArrayList<>(n);
  4. int res = 1;
  5. for (int i = 1; i <= n; i++) {
  6. list.add(res);
  7. if (res * 10 <= n) {
  8. res *= 10;
  9. } else if (res % 10 != 9 && res + 1 <= n) {
  10. res++;
  11. }else {
  12. while ((res / 10) % 10 == 9) {
  13. res /= 10;
  14. }
  15. res = res / 10 + 1;
  16. }
  17. }
  18. return list;
  19. }
  20. }

Review

如何掌控你的自由时间?

  • What 每个不起眼的时刻都潜力无限。你可以用零星的时间,来获得零星的快乐。那么,如何合理的利用自己的时间吗?怎么样才能高效控制好时间?
  • How 先建立我们想要的生活,时间就会自然而然节省出来,时间是有弹性的。我们不能创造更多时间,但是时间会自己调整去适应我们选择去做的事情。

Tip

  • What 常用SQL语句优化技巧总结
  • How
  • 1.通过变量的方式来设置参数

    • good:stringsql = "select * from orders where customer_name not exist (select customer_name from customer)";
    • bad:stringsql = "select * from orders where customer_name not in(select customer_name from customer)";
    • why:如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。
  • *2.不要使用(select )
    • good:stringsql = "select people_name,pepole_age from people ";
    • bad:stringsql = "select * from people ";
    • why:使用select *的话会增加解析的时间,另外会把不需要的数据也给查询出来,数据传输也是耗费时间的,比如text类型的字段通常用来保存一些内容比较繁杂的东西,如果使用select *则会把该字段也查询出来。
  • 3.谨慎使用模糊查询
    • good:stringsql = "select * from people p where p.id like 'parm1%' ";
    • bad:stringsql = "select * from people p where p.id like '%parm1%' ";
    • why:当模糊匹配以%开头时,该列索引将失效,若不以%开头,该列索引有效。
  • 4.不要使用列号
    • good:stringsql = "select people_name,pepole_age from people order by name,age";
    • bad:stringsql = "select people_name,pepole_age from people order by 6,8";
    • why:使用列号的话,将会增加不必要的解析时间。
  • 5.优先使用UNION ALL,避免使用UNION
    • good:stringsql = "select name from student union all select name from teacher";
    • bad:stringsql = "select name from student union select name from teacher";
    • why:UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。还有一种情况,如果业务上能够确保不会出现重复记录。
  • 6.在where语句或者order by语句中避免对索引字段进行计算操作
    • good:stringsql = "select people_name,pepole_age from people where create_date=date1 ";
    • bad:stringsql = "select people_name,pepole_age from people where trunc(create_date)=date1";
    • why:当在索引列上进行操作之后,索引将会失效。正确做法应该是将值计算好再传入进来。
  • 7.使用not exist代替not in
    • good:stringsql = "select * from orders where customer_name not exist (select customer_name from customer)";
    • bad:stringsql = "select * from orders where customer_name not in(select customer_name from customer)";
    • why:如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。
  • 8.exist和in的区别
    • in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。因此,in用到的是外表的索引, exists用到的是内表的索引。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
    • 例如:表A(小表),表B(大表):

      *效率低,用到了A表上cc列的索引:select * from A where exists(select cc from B where cc=A.cc)

      *效率高,用到了B表上cc列的索引:select * from B where exists(select cc from A where cc=B.cc)
  • 9.避免在索引列上做如下操作:(当在索引列上使用如下操作时,索引将会失效,造成全表扫描。)
    • 避免在索引字段上使用<>,!=
    • 避免在索引列上使用IS NULL和IS NOT NULL
    • 避免在索引列上出现数据类型转换(比如某字段是String类型,参数传入时是int类型)
  • 10.复杂操作可以考虑适当拆成几步
    • 有时候会有通过一个SQL语句来实现复杂业务的例子出现,为了实现复杂的业务,嵌套多级子查询。造成SQL性能问题。对于这种情况可以考虑拆分SQL,通过多个SQL语句实现,或者把部分程序能完成的工作交给程序完成。

Share

神经网络最大的优点,以及最严重的缺陷

2018-10-10-weekly的更多相关文章

  1. 申请Office 365一年免费的开发者账号攻略(2018年10月份版本)

    要进行Office 365开发,当然需要有完整的Office 365环境才可以.为了便于广大开发人员快速地启动这项工作,微软官方给所有开发人员提供了免费的一年开发者账号   那么如何申请Office ...

  2. IntelliJ IDEA 最新激活码(截止到2018年10月14日)

    IntelliJ IDEA 注册码: EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYX ...

  3. 新手C#SQL Server使用记录2018.08.10

    主键(PrimaryKey):主键就是每个数据行(记录)的唯一标识,不会有重复值的列(字段)才能当做主键.一个表可以没有主键,但是这样会很难处理表,因此一般情况表都要设置主键. 主键有两张选用策略,分 ...

  4. 01 mybatis框架整体概况(2018.7.10)-

    01 mybatis框架整体概况(2018.7.10)- F:\廖雪峰 JavaEE 企业级分布式高级架构师课程\廖雪峰JavaEE一期\第一课(2018.7.10) maven用的是3.39的版本 ...

  5. 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H)

    目录 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛链接 竞赛题目 总结 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛 ...

  6. 富士康的盈利秒杀99%的A股公司:3星|《三联生活周刊》2018年10期

    三联生活周刊·最美的数学:天才为何成群到来(2018年10期) 本期专题是数学和成都,我都跳过去没看.其他内容也还有点意思. 总体评价3星. 以下是本期一些内容的摘抄,#号后面是kindle电子版中的 ...

  7. Burn Down Chart(2018.6.4~2018.6.10)

    Burn Down Chart (2018.6.4~2018.6.10) 娄雨禛[前端部分] 曾子轩[后端部分+燃尽图] 前端 1. 娄雨禛+李鑫 1)在总工程中完成跳转,实现图片显示,并发布到Git ...

  8. Java分布式互联网架构/微服务/高性能/springboot/springcloud 2018年10月17日直播内容

    2018年10月17日直播内容 大规模并发必备的消息中间件技术ActiveMq 网盘链接: https://pan.baidu.com/s/1GlxsZ2JnrvX- YN16-S7lQw 提取码: ...

  9. iOS 10.10 10.11 10.12 安装升级CocoPods

    CocoPods简介 CocoaPods是一个用Ruby写的,负责管理iOS以及OSX系统下的一个第三方类库管理工具,通过CocoaPods,我们可以集中,统一的管理第三方开源库.当然这些库徐亚Coc ...

  10. 二进制手动部署kubernetes 1.10.10

    转载于:https://www.jevic.cn/2018/09/23/kuberentes-1.10.10/?tdsourcetag=s_pcqq_aiomsg#heapster 通读一遍在实际操作 ...

随机推荐

  1. Swift equality

    最后更新: 2017-07-23 在程序开发中,我们时常需要来判断两个对象是否相等.在编程思想中,两个对象相等指的是在内存中的地址相同,也就是两个指针指向同一个地址.但是在日常理解中,只要两个对象的内 ...

  2. which statement is true for the class java.util.ArrayList?

    A.集合中的元素是有序的   对 B.集合被保证为不可变的  错 C.集合中的元素被保证为唯一的  错  有序的 所以不唯一 D.集合中的元素使用一个唯一的键来存取   错   没有键 E.集合中的元 ...

  3. POJ 1385 Lifting the Stone (多边形的重心)

    Lifting the Stone 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/G Description There are ...

  4. dataframe指定位置插入行

    1 loc( ) 函数可以定位行后,并直接赋值插入. 如下可见loc函数对直接改变原来行的值 df = pd.DataFrame({ '动物' : ['狗','猫','兔'], '数量' : [ 3, ...

  5. delphi备份恢复剪切板

    http://blog.csdn.net/youthon/article/details/7327776 delphi备份恢复剪切板         分类:            Delphi编程20 ...

  6. gitee.ZC_blog快速方案

    1. 1.1.改 hexo的配置文件中 gitee的路径 复制URL,到hexo的配置文件_config.yml …… deploy: type: git # type为git repo: https ...

  7. Mac014--Sourcetree安装(Git client)

    Sourcetree:git client Tool Step1:download address: https://www.sourcetreeapp.com/ Step2:要求username/u ...

  8. Jboss JNDI ENC 数据源

    结合最近两天在网上看的各种帖子,昨天自己实际试了下,下面以问题的方式,对自己之前的困惑做个回答. 首先说一下,要用到的几个文件. 1)Jboss数据源配置文件,这儿是oracle数据源,数据源后缀名必 ...

  9. Java 和操作系统交互,你猜会发生什么?

    作者:lonelysnow https://www.jianshu.com/p/7f6832d61880 结合 CPU 理解一行 Java 代码是怎么执行的 根据冯·诺依曼思想,计算机采用二进制作为数 ...

  10. JDK的下载与Java运行环境

    JDK简介 什么是JDK JDK是Java Development Kit的缩写,意思是Java开发工具包.JDK就好比作人的心脏,人没有了心脏,生命也就失去存在的意义.Java也一样,JDK就是它的 ...