Skip to content

Commit a39e5a3

Browse files
author
henryjia
committed
graduate1
1 parent 3c2564a commit a39e5a3

File tree

8 files changed

+396
-5
lines changed

8 files changed

+396
-5
lines changed

docs/.DS_Store

0 Bytes
Binary file not shown.

docs/data-structure-algorithms/soultion/Array-Solution.md

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,40 @@ public static int maxProfit_1(int[] nums){
190190
> 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
191191
> ```
192192
193-
[动态规划、分治]
193+
**思路**:「连续」子数组,题目要求的是返回结果,用 [动态规划、分治]
194+
195+
```java
196+
public static int maxSubArray3(int[] nums) {
197+
//特判
198+
if (nums == null || nums.length == 0) {
199+
return 0;
200+
}
201+
//初始化
202+
int length = nums.length;
203+
int[] dp = new int[length];
204+
// 初始值,只有一个元素的时候最大和即它本身
205+
dp[0] = nums[0];
206+
int ans = nums[0];
207+
// 状态转移
208+
for (int i = 1; i < length; i++) {
209+
// 取当前元素的值 和 当前元素的值加上一次结果的值 中最大数
210+
dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);
211+
// 和最大数对比 取大
212+
ans = Math.max(ans, dp[i]);
213+
}
214+
return ans;
215+
}
216+
217+
//优化版
218+
public int maxSubArray(int[] nums) {
219+
int pre = 0, maxAns = nums[0];
220+
for (int x : nums) {
221+
pre = Math.max(pre + x, x);
222+
maxAns = Math.max(maxAns, pre);
223+
}
224+
return maxAns;
225+
}
226+
```
194227
195228

196229

@@ -315,7 +348,7 @@ public int maxArea(int[] height){
315348

316349
### [215. 数组中的第K个最大元素](https://leetcode-cn.com/problems/kth-largest-element-in-an-array/)
317350

318-
> 给定整数数组 `nums` 和整数 `k`,请返回数组中第 `**k**` 个最大的元素。
351+
> 给定整数数组 `nums` 和整数 `k`,请返回数组中第 `k` 个最大的元素。
319352
>
320353
> 请注意,你需要找的是数组排序后的第 `k` 个最大的元素,而不是第 `k` 个不同的元素。
321354
>
@@ -330,3 +363,36 @@ public int maxArea(int[] height){
330363
> ```
331364
332365
**思路**:
366+
367+
368+
369+
370+
371+
### [31. 下一个排列](https://leetcode.cn/problems/next-permutation/)
372+
373+
> 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。
374+
>
375+
> 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。
376+
> 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。
377+
>
378+
> - 例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。
379+
> - 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。
380+
> - 而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。
381+
>
382+
> 给你一个整数数组 nums ,找出 nums 的下一个排列。
383+
>
384+
> > 题干的意思就是:找出这个数组排序出的所有数中,刚好比当前数大的那个数
385+
>
386+
> 必须 原地 修改,只允许使用额外常数空间。
387+
>
388+
> ```
389+
> 输入:nums = [1,2,3]
390+
> 输出:[1,3,2]
391+
> ```
392+
>
393+
> ```
394+
> 输入:nums = [3,2,1]
395+
> 输出:[1,2,3]
396+
> ```
397+
398+
**思路**:

docs/framework/.DS_Store

0 Bytes
Binary file not shown.

docs/framework/MyBatis/.DS_Store

6 KB
Binary file not shown.

docs/framework/MyBatis/MyBatis-FAQ.md

Lines changed: 0 additions & 2 deletions
This file was deleted.

docs/framework/MyBatis/MyBatis.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
MyBatis是一个支持**普通SQL查询****存储过程****高级映射**的优秀**持久层框架**。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的**XML或注解**用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2+
3+
4+
5+
6+
7+
很多人会将 Hibernate 和 MyBatis 做比较,认为 Hibernate 是全自动 ORM 框架,而 MyBatis 只是半自动的 ORM 框架或是一个 SQL 模板引擎。其实,这些比较都无法完全说明一个框架比另一个框架先进,关键还是看应用场景。
8+
9+
映射文件或是注解定义 Java 语言中的类与数据库中的表之间的各种映射关系,这里使用到的映射文件后缀为“.hbm.xml”。
10+
11+
但需要注意的是,Hibernate 并不是一颗“银弹”,我们无法在面向对象模型中找到数据库中所有概念的映射,例如,索引、函数、存储过程等。
12+
13+
Hibernate 通过其简洁的 API 以及统一的 HQL 语句,帮助上层程序屏蔽掉底层数据库的差异,增强了程序的可移植性。
14+
15+
在一些大数据量、高并发、低延迟的场景中,Hibernate 在性能方面带来的损失就会逐渐显现出来。
16+
17+
18+
19+
MyBatis 中一个重要的功能就是可以帮助 Java 开发封装重复性的 JDBC 代码,这与前文分析的 Spring Data JPA 、Hibernate 等 ORM 框架一样。MyBatis 封装重复性代码的方式是通过 Mapper 映射配置文件以及相关注解,将 ResultSet 结果映射为 Java 对象,在具体的映射规则中可以嵌套其他映射规则和必要的子查询,这样就可以轻松实现复杂映射的逻辑,当然,也能够实现一对一、一对多、多对多关系映射以及相应的双向关系映射。
20+
21+
22+
23+
MyBatis 相较于 Hibernate 和各类 JPA 实现框架更加灵活、更加轻量级、更加可控。
24+
25+
- 我们可以在 MyBatis 的 Mapper 映射文件中,直接编写原生的 SQL 语句,应用底层数据库产品的方言,这就给了我们直接优化 SQL 语句的机会;
26+
27+
- 我们还可以按照数据库的使用规则,让原生 SQL 语句选择我们期望的索引,从而保证服务的性能,这就特别适合大数据量、高并发等需要将 SQL 优化到极致的场景;
28+
29+
- 在编写原生 SQL 语句时,我们也能够更加方便地控制结果集中的列,而不是查询所有列并映射对象后返回,这在列比较多的时候也能起到一定的优化效果。(当然,Hibernate 也能实现这种效果,需要在实体类添加对应的构造方法。)

0 commit comments

Comments
 (0)