文章目录
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