2018-10-10-weekly
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
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> list = new ArrayList<>(n);
int res = 1;
for (int i = 1; i <= n; i++) {
list.add(res);
if (res * 10 <= n) {
res *= 10;
} else if (res % 10 != 9 && res + 1 <= n) {
res++;
}else {
while ((res / 10) % 10 == 9) {
res /= 10;
}
res = res / 10 + 1;
}
}
return list;
}
}
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的更多相关文章
- 申请Office 365一年免费的开发者账号攻略(2018年10月份版本)
要进行Office 365开发,当然需要有完整的Office 365环境才可以.为了便于广大开发人员快速地启动这项工作,微软官方给所有开发人员提供了免费的一年开发者账号 那么如何申请Office ...
- IntelliJ IDEA 最新激活码(截止到2018年10月14日)
IntelliJ IDEA 注册码: EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYX ...
- 新手C#SQL Server使用记录2018.08.10
主键(PrimaryKey):主键就是每个数据行(记录)的唯一标识,不会有重复值的列(字段)才能当做主键.一个表可以没有主键,但是这样会很难处理表,因此一般情况表都要设置主键. 主键有两张选用策略,分 ...
- 01 mybatis框架整体概况(2018.7.10)-
01 mybatis框架整体概况(2018.7.10)- F:\廖雪峰 JavaEE 企业级分布式高级架构师课程\廖雪峰JavaEE一期\第一课(2018.7.10) maven用的是3.39的版本 ...
- 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H)
目录 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛链接 竞赛题目 总结 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛 ...
- 富士康的盈利秒杀99%的A股公司:3星|《三联生活周刊》2018年10期
三联生活周刊·最美的数学:天才为何成群到来(2018年10期) 本期专题是数学和成都,我都跳过去没看.其他内容也还有点意思. 总体评价3星. 以下是本期一些内容的摘抄,#号后面是kindle电子版中的 ...
- Burn Down Chart(2018.6.4~2018.6.10)
Burn Down Chart (2018.6.4~2018.6.10) 娄雨禛[前端部分] 曾子轩[后端部分+燃尽图] 前端 1. 娄雨禛+李鑫 1)在总工程中完成跳转,实现图片显示,并发布到Git ...
- Java分布式互联网架构/微服务/高性能/springboot/springcloud 2018年10月17日直播内容
2018年10月17日直播内容 大规模并发必备的消息中间件技术ActiveMq 网盘链接: https://pan.baidu.com/s/1GlxsZ2JnrvX- YN16-S7lQw 提取码: ...
- iOS 10.10 10.11 10.12 安装升级CocoPods
CocoPods简介 CocoaPods是一个用Ruby写的,负责管理iOS以及OSX系统下的一个第三方类库管理工具,通过CocoaPods,我们可以集中,统一的管理第三方开源库.当然这些库徐亚Coc ...
- 二进制手动部署kubernetes 1.10.10
转载于:https://www.jevic.cn/2018/09/23/kuberentes-1.10.10/?tdsourcetag=s_pcqq_aiomsg#heapster 通读一遍在实际操作 ...
随机推荐
- Swift equality
最后更新: 2017-07-23 在程序开发中,我们时常需要来判断两个对象是否相等.在编程思想中,两个对象相等指的是在内存中的地址相同,也就是两个指针指向同一个地址.但是在日常理解中,只要两个对象的内 ...
- which statement is true for the class java.util.ArrayList?
A.集合中的元素是有序的 对 B.集合被保证为不可变的 错 C.集合中的元素被保证为唯一的 错 有序的 所以不唯一 D.集合中的元素使用一个唯一的键来存取 错 没有键 E.集合中的元 ...
- POJ 1385 Lifting the Stone (多边形的重心)
Lifting the Stone 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/G Description There are ...
- dataframe指定位置插入行
1 loc( ) 函数可以定位行后,并直接赋值插入. 如下可见loc函数对直接改变原来行的值 df = pd.DataFrame({ '动物' : ['狗','猫','兔'], '数量' : [ 3, ...
- delphi备份恢复剪切板
http://blog.csdn.net/youthon/article/details/7327776 delphi备份恢复剪切板 分类: Delphi编程20 ...
- gitee.ZC_blog快速方案
1. 1.1.改 hexo的配置文件中 gitee的路径 复制URL,到hexo的配置文件_config.yml …… deploy: type: git # type为git repo: https ...
- Mac014--Sourcetree安装(Git client)
Sourcetree:git client Tool Step1:download address: https://www.sourcetreeapp.com/ Step2:要求username/u ...
- Jboss JNDI ENC 数据源
结合最近两天在网上看的各种帖子,昨天自己实际试了下,下面以问题的方式,对自己之前的困惑做个回答. 首先说一下,要用到的几个文件. 1)Jboss数据源配置文件,这儿是oracle数据源,数据源后缀名必 ...
- Java 和操作系统交互,你猜会发生什么?
作者:lonelysnow https://www.jianshu.com/p/7f6832d61880 结合 CPU 理解一行 Java 代码是怎么执行的 根据冯·诺依曼思想,计算机采用二进制作为数 ...
- JDK的下载与Java运行环境
JDK简介 什么是JDK JDK是Java Development Kit的缩写,意思是Java开发工具包.JDK就好比作人的心脏,人没有了心脏,生命也就失去存在的意义.Java也一样,JDK就是它的 ...