ARTS-第20周

ARTS (第20周)

开篇词

最近事情很多,但是生活和忙碌之余,也不能忘记学习。

本周:

动态规划

Algorithm 算法

最大有序子序列-动态规划

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192


import java.util.Arrays;
import java.util.Random;

//
public class DpLISTest {
static Random rd = new Random();

public static void main(String[] args) {

while (true) {
test();
}
}

private static void test() {
int s = 5;
int[] n = new int[s];
for (int i = 0; i < s; i++) {
n[i] = rd.nextInt(9) + 1;
}
// n = new int[] { 8, 3, 6, 4, 8 };
// n = new int[] { 8, 9, 1, 3, 3 };
System.out.println("=-=-=-=-=-=-=");
int r1 = lis(n);
int r2 = maxSortNumsAll(n);
System.out.println(Arrays.toString(n));
System.out.println("r1:" + r1 + ",r2:" + r2);
if (r1 != r2) {
System.exit(0);
}
}

/*

*/
// 简易版
public static int lis(int[] a) {
int[] dp = new int[a.length];
for (int i = 0; i < a.length; i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (a[i] > a[j]) {
// a[j]值为最大值的序列加上a[i],所以进行加一
int n1 = dp[j] + 1;
// a[i]值为最大值的序列长度
int n2 = dp[i];
dp[i] = max(n1, n2);
}
}
}
// 找最大值
int idx = 0;
for (int i = 0; i < dp.length; i++) {
if (dp[i] > dp[idx]) {
idx = i;
}

}
// 输出序列(只是其中一种)
int ix = idx;
System.out.print("->" + a[idx]);
for (int i = idx - 1; i >= 0; i--) {
// 其实可以用穷举 这里就不写了
if (dp[i] + 1 == dp[idx]) {
idx = i;
System.out.print("," + a[idx]);
}
}
System.out.println();
return dp[ix];
}

// 复杂版
public static int lis_(int[] a) {
int[][] dp = new int[a.length][a.length];
for (int i = 0; i < a.length; i++) {
dp[i][i] = 1;
// 复制一份
for (int j = 0; j < i; j++) {
dp[i][j] = dp[i - 1][j];
}

for (int j = 0; j < i; j++) {
if (a[i] > a[j]) {
// a[j]值为最大值的序列加上a[i],所以进行加一
int n1 = dp[i - 1][j] + 1;
// a[i]值为最大值的序列长度
int n2 = dp[i - 1][i];
dp[i][i] = max(n1, n2);
}
}
}
// 找最大值
int idx = 0;
for (int i = 0; i < dp.length; i++) {
if (dp[dp.length - 1][i] > dp[dp.length - 1][idx]) {
idx = i;
}

}
// 输出序列
int ix = idx;
System.out.print("->" + a[idx]);
for (int i = idx - 1; i >= 0; i--) {
// 其实可以用穷举 这里就不写了
if (dp[dp.length - 1][i] + 1 == dp[dp.length - 1][idx]) {
idx = i;
System.out.print("," + a[idx]);
}
}
System.out.println();
return dp[dp.length - 1][ix];
}

public static int max(int n1, int n2) {
if (n2 > n1) {
return n2;
}
return n1;

}



public static int maxSortNumsAll(int[] n) {
maxNums = 0;
maxSortNumsAll(n, 0, 1, 1);
return maxNums;
}

// 较慢
public static int maxSortNumsAll_(int[] n) {
maxNums = 0;
maxSortNumsAll_(n, 0, 1, 1);
return maxNums;
}

// 最大有序长度
public static void maxSortNumsAll(int[] n, int i, int j, int len) {
// System.out.println( "i=" + i + ",j=" + j );
if (len > maxNums) {
maxNums = len;
}
if (j == n.length) {
return;
}
if (n[i] < n[j]) {
// 有序度加一
maxSortNumsAll(n, j, j + 1, len + 1);
}
// 跳过当前数
maxSortNumsAll(n, i, j + 1, len);
// 下一组数
if (i == j - 1)// 少做点运算
maxSortNumsAll(n, i + 1, j + 1, 1);
}

static int maxNums = 0;

// 最大有序长度
public static void maxSortNumsAll_(int[] n, int i, int j, int len) {
// System.out.println( "i=" + i + ",j=" + j );
if (len > maxNums) {
maxNums = len;
}
if (j == n.length) {
return;
}

// 当前数字和后续所有数字进行比较
for (int k = j; k < n.length; k++) {
if (n[i] < n[k]) {
// 有序度加一
maxSortNumsAll_(n, k, k + 1, len + 1);
}
}
// 01 12 23
maxSortNumsAll_(n, i + 1, j + 1, 1);
}

public static void printArr(int[][] arr) {
System.out.println("----------------//");
for (int[] is : arr) {
System.out.println(Arrays.toString(is));
}
System.out.println("----------------//");
}


}

Review 英文文章

https://content.pivotal.io/springone-platform-2017/whats-new-in-spring-boot-2-0-phillip-webb-madhura-bhave

spring2.0有哪些变化

Tip 技巧

最近事情较多,就又做了下动态规划的练习以及Oauth2的学习。

oauth参考:

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

https://www.jianshu.com/p/3427549a148a

https://www.cnblogs.com/xifengxiaoma/p/10043173.html(这个最详细)

Share 分享

https://www.ibm.com/developerworks/cn/java/l-secureclass/
加密jar包

https://gitee.com/liuge1988/spring-boot-demo

各类spring的demo