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 通读一遍在实际操作 ...
随机推荐
- Menu Items are not showing on Action Bar
http://stackoverflow.com/questions/18010072/menu-items-are-not-showing-on-action-bar 版权声明:本文为博主原创文章, ...
- multipages-generator今日发布?!妈妈再也不用担心移动端h5网站搭建了!
本文适合的读者???? 现在在手淘,京东,今日头条,美柚等过亿用户的手机app中的,都常见h5网页,他们有更新快,灵活,便于分享和传播的特性.这里有他们中的几个h5的例子:(手淘,美柚).这些a ...
- HDU6030 Happy Necklace(推导+矩阵快速幂)
HDU6030 Happy Necklace 推导或者可以找规律有公式:\(f[n] = f[n-1] + f[n-3]\) . 构造矩阵乘法: \[ \begin{pmatrix} f_i \\ f ...
- qcom Android Camera【转】
本文转载自:http://blog.csdn.net/Wilsonboliu/article/details/54949196 1.总体架构 Android Camera 框架从整体上看是一个 cli ...
- Linux驱动开发5——同步机制
上一章讲到了并发,指的是多个进程同时存取临界区资源的处理机制.这一章讲的同步机制,讲的是多个进程之间协同工作的处理机制,如临界区数据还没有准备好,A进程负责准备数据,B进程等待A进程完成之后读取数据. ...
- mysql5.7多实例安装
[root@vhost1]# cd /opt/source[root@vhost1]#ls mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz[root@vhost1 ...
- PHP密码和token
密码 直接md5和sha1不安全!!! crypt()和hash_equals(): http://php.net/manual/zh/function.crypt.php <?php // c ...
- Jmeter之用户参数和用户定义的变量
在调试脚本的时候,可以使用前置处理器中的用户参数组件进行数据的提供,在该数据中可以使用固定值也可以使用变量值. 如果是固定不变的一些配置项,不需要多个值的时候,也可以使用用户已定义的变量组件. 一.界 ...
- Win32InputBox,C接口的,实现类似VB的InputBox的功能
#ifndef __03022006__WIN32INPUTBOX__ #define __03022006__WIN32INPUTBOX__ /* This library is (c) Elias ...
- ecshop启用gzip后,后台不能打开不能访问的问题
上传测试的时候,站点显示无法打开.随后我用网址打开根目录的robots文件.图片.静态页···全部可以正常打开··· 我尴尬···一一检查后,我就怀疑是不是客户当初设置gzip压缩的问题了.但连后台都 ...