1. Algorithm:
难度:简单
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
- 题解一
直接嵌套便利(时间复杂度O(n^2))
public int[] twoSum(int[] nums, int target) {
int [] sumNums = new int[2];
//先便利数组
for (int i=0;i<nums.length;i++) {
for (int j=0;j<nums.length;j++) {
if (nums[i]+nums[j]==target&&i!=j) {
sumNums[0] = i;
sumNums[1] = j;
return sumNums;
}
}
}
return null;
}
研究了别的优秀题解,使用hashMap的查询时间复杂度为0(1)的特性,可以通过元素的hashcode直接确定有无解在hashmap里,可以只便利两次,时间复杂度(O(n))
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement) && map.get(complement) != i) {
return new int[] { i, map.get(complement) };
}
}
throw new IllegalArgumentException("No two sum solution");
}
2.Review:
本次review带来的是spring官网的对springBoot的描述:地址
Ps:并非逐字逐句翻译,只是写出一些我的总结
why springBoot?
- springboot让独立开发变成了现实,因为只需要很少的配置(just one 【application.properties】)
- 内置tomcat,jetty容器,不用再打war包
- springboot封装了很多jar包变成starter,还可以用spring-boot-starter-parent来统一管理jar包版本,这样解决了大量的依赖冲突和jar包版本问题
- springboot会自动装配第三方依赖jar包
- 告别代码配置,xml配置
- 提供一套度量,健康检查和配置标准
3.Tip:
linux 的crontab定时任务脚本中一定不要写相对路径。因为你可能测得脚本好好的。但是作为定时任务执行时。会因为找不到路径而与预期执行结果不符(位置在/var/spool/cron)。
4.Share:
分享一篇李智慧老师写的干货吧:软件设计文档示例模板