ARTS挑战第一周

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

随着年龄的越来越大,发现很多事情依靠自己的能力去解决是最便捷的。
所以就投资自己吧,把时间和金钱都用来充实自己。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值