文章目录
1.Algorithm
1.1数组-两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
实例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解法一:暴力法
- 分别选择每个nums[i]元素作为第一个加数
- 从nums[i+1]开始遍历,作为另一个加数
- 比较两个加数的和与target是否相等
public static int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
时间复杂度O(n^2)
控件复杂度O(1)
解法二:使用map.containsKey()
思路改变:
- 选择nums[i]为加数
- 获取target-nums[i]的值并且在nums中查找是否存在该值
- 使用map.contans()方法减少查找的时间消耗
public static int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int temp = target - nums[i];
if (map.containsKey(temp) && map.get(temp) != i) {
return new int[]{i, map.get(temp)};
}
}
throw new IllegalArgumentException("No two sum solution");
}
时间复杂度O(n)
空间复杂度O(n)
解法三:map.containsKey()小技巧
- 使用一个小技巧,可以只遍历一次
- 每次向map中添加的数字nums[i]作为第一个加数
- 第二个加数在map查找是否存在
public static int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer i = 0; i < nums.length; i++) {
int temp = target - nums[i];
if (map.containsKey(temp)) {
return new int[]{map.get(temp), i};
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
时间复杂度O(n)
空间复杂度O(n)
2.Review
没有找到英文技术文章,就打开spring的官网看看吧。
https://spring.io/
首先看看菜单栏共有四个按钮
projects
里面是spring相关的一些框架,包括我们熟悉的spring framework其实就是常说的spring,然后当然还有spring boot和spring cloud。点进去以后可以找到每个框架的各个版本,说明文档和API文档,这几个入口比较重要。Guides
参考指南,相当于教别人如何使用一个框架做个hello word的样子Blog
是相关的新闻,版本升级或者其他公告吧Training & Certification
看起来像是卖课程的,但是没有找到支付入口;或者就是一些课后题的样子,还有自测内容。
3.Tip
3.1filter拦截方式
应用场景:
在进入首页index.jsp时,AutoLogin filter会取cookie中的信息进行自动登录;
在退出时,Logout servlet 可以销毁session不销毁cookie,然后重定向到index页面req.getRequestDispatcher("index.jsp").forward(req, resp);
,此时会filter被拦截,然后自动登录,那么退出失败;所以应该只拦截request请求。
<dispatcher>
设置了filter的拦截方式;
不设置,默认只拦截request请求;
<filter>
<filter-name>AutoLogin</filter-name>
<filter-class>wangcf.filter.AutoLogin</filter-class>
</filter>
<filter-mapping>
<filter-name>AutoLogin</filter-name>
<url-pattern>/index.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
4.Share
随着年龄的越来越大,发现很多事情依靠自己的能力去解决是最便捷的。
所以就投资自己吧,把时间和金钱都用来充实自己。