ARTS挑战第三周

1.Algorithm

1.1 移除元素

题目描述:

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

实例:

给定 nums = [3,2,2,3], val = 3,
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。
你不需要考虑数组中超出新长度后面的元素。

1.1.1 解法一:

使用双指针,设定慢指针i和快指针j
当nums[j]!=3时,nums[i]=nums[j] i++

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0;
        for(int j = 0; j < nums.length; j++){
            if(nums[j] != 3){
                nums[i] = nums[j];
                i++;
            }
        }
        return i;
    }
}

时间复杂度:O(n)
控件复杂度:O(1)

1.1.2 解法二

题目中的元素的顺序可以改变就给出了提示,读题时要考虑题目中的每个描述。
通过这个描述,可能会引出一个解法。

考虑要移除的元素较少时
nums = [1,2,3,4,5]; val = 5;使用解法一前4步的赋值是否多余;
nums = [1,2,3,4,5]; val = 1;要做4步赋值,如果不考虑元素顺序,只要将1和5交换即可;
解题思路:任然设置两个指针:i头指针,j尾指针;nums[i] = val时,使nums[i] = nums[j-1];j++;否则i++向前移位。

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0;
        int j = nums.length;
        while (i < j) {
            if (nums[i] == val){
                nums[i] = nums[j-1];
                j--;
            } else {
                i++;
            }
        }
        return i;
    }
}

2.Review

2.1 Spring Core

IOC and AOP

3.Tip

3.1 java web 代码分层结构

各层的功能,目前的理解,还不够透彻:

controller中的工作:传参数给service,处理返回的DTO,从缓存中取字典,获取字典项值。
service中的工作:拼接sql语句,获取sql的返回值Entity类型,并且将其转换为DTO类型,传出给controller。这里面的业务处理通常是一个事务,调用多个Dao中的方法。
Dao中的工作:处理增删改查,方法名称需要和mapper中SQL的名称一致

疑问:ServiceImp中的方法必须在接口IService,这样才能调用到,比较奇怪,接口中的方法应该是公共的,而实现类中应该有自己独特的方法,没必要都继承接口的吧。

4.Share

4.1 mybatis的结构

JDBC是java提供的与数据库连接和操作数据库的工具类,它是最底层的实现。
在Javaweb开发中,我们需要将数据库表与自定义java类映射,并且在操作数据库时也希望返回的结果集是相应的类对象。这样就需要我们对JDBC进行封装,才能使代码可以重用。
mybatis帮助我们实现了这个工能,我们只需要关注SQL的编写和事务的处理。
在这里插入图片描述

如上图所示,展示了mybatis的整体结构

SqlMapConfig.xml是mybatis的全局配置文件,其中包括连接数据库的信息和数据库连接池配置。
Mapper.xml文件中包括具体的SQL,并且在SqlMapConfig.xml需要对其引用。

操作数据库的工作包括创建链接,获取会话,执行Sql,获取结果集
在mybatis中都有提供:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值