modify code structure

pull/6/head
左程云 5 years ago
parent 6041ac97e1
commit de2e3f6fb0

@ -1,4 +1,4 @@
package class01_01;
package class01;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01;
package class01;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01;
package class01;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01;
package class01;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01;
package class01;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01;
package class01;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class01_01;
package class01;
public class Code06_BSAwesome {

@ -1,4 +1,4 @@
package class01_02;
package class02;
public class Code01_Swap {

@ -1,4 +1,4 @@
package class01_02;
package class02;
public class Code02_EvenTimesOddTimes {

@ -1,4 +1,4 @@
package class01_02;
package class02;
import java.util.HashMap;
import java.util.HashSet;

@ -1,4 +1,4 @@
package class02_03;
package class03;
import java.util.ArrayList;
import java.util.List;

@ -1,4 +1,4 @@
package class02_03;
package class03;
public class Code02_DeleteGivenValue {

@ -1,4 +1,4 @@
package class02_03;
package class03;
import java.util.LinkedList;
import java.util.Queue;

@ -1,4 +1,4 @@
package class02_03;
package class03;
public class Code04_RingArray {

@ -1,4 +1,4 @@
package class02_03;
package class03;
import java.util.Stack;

@ -1,4 +1,4 @@
package class02_03;
package class03;
import java.util.LinkedList;
import java.util.Queue;

@ -1,4 +1,4 @@
package class02_03;
package class03;
public class Code08_GetMax {

@ -1,4 +1,4 @@
package class02_03;
package class03;
import java.util.HashMap;
import java.util.HashSet;

@ -1,4 +1,4 @@
package class03_04;
package class04;
public class Code01_MergeSort {

@ -1,4 +1,4 @@
package class03_04;
package class04;
public class Code02_SmallSum {

@ -1,4 +1,4 @@
package class03_04;
package class04;
public class Code03_ReversePair {

@ -1,4 +1,4 @@
package class03_04;
package class04;
public class Code04_BiggerThanRightTwice {

@ -1,4 +1,4 @@
package class03_05;
package class05;
// 这道题直接在leetcode测评
// https://leetcode.com/problems/count-of-range-sum/

@ -1,4 +1,4 @@
package class03_05;
package class05;
public class Code02_PartitionAndQuickSort {

@ -1,4 +1,4 @@
package class04_06;
package class06;
import java.util.ArrayList;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class04_06;
package class06;
import java.util.Comparator;
import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class04_06;
package class06;
import java.util.Arrays;
import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class04_06;
package class06;
import java.util.Arrays;
import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class04_07;
package class07;
import java.util.Arrays;
import java.util.Comparator;

@ -1,4 +1,4 @@
package class04_07;
package class07;
import java.util.ArrayList;
import java.util.Comparator;

@ -1,4 +1,4 @@
package class04_07;
package class07;
import java.util.ArrayList;
import java.util.Comparator;

@ -1,4 +1,4 @@
package class04_07;
package class07;
public class Inner<T> {
public T value;

@ -1,4 +1,4 @@
package class05_08;
package class08;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class05_08;
package class08;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class05_08;
package class08;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class05_08;
package class08;
import java.util.Arrays;

@ -1,4 +1,4 @@
package class06_09;
package class09;
import java.util.ArrayList;

@ -1,4 +1,4 @@
package class06_09;
package class09;
import java.util.Stack;

@ -1,4 +1,4 @@
package class06_09;
package class09;
public class Code03_SmallerEqualBigger {

@ -1,4 +1,4 @@
package class06_09;
package class09;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class06_10;
package class10;
public class Code01_FindFirstIntersectNode {

@ -1,6 +1,6 @@
package class07_10;
package class10;
public class Code01_RecursiveTraversalBT {
public class Code02_RecursiveTraversalBT {
public static class Node {
public int value;

@ -1,8 +1,8 @@
package class07_10;
package class10;
import java.util.Stack;
public class Code02_UnRecursiveTraversalBT {
public class Code03_UnRecursiveTraversalBT {
public static class Node {
public int value;

@ -1,4 +1,4 @@
package class07_11;
package class11;
import java.util.LinkedList;
import java.util.Queue;

@ -1,4 +1,4 @@
package class07_11;
package class11;
import java.util.LinkedList;
import java.util.Queue;

@ -1,4 +1,4 @@
package class07_11;
package class11;
import java.util.ArrayList;
import java.util.List;

@ -1,4 +1,4 @@
package class07_11;
package class11;
public class Code04_PrintBinaryTree {

@ -1,4 +1,4 @@
package class07_11;
package class11;
import java.util.HashMap;
import java.util.LinkedList;

@ -1,4 +1,4 @@
package class07_11;
package class11;
public class Code06_SuccessorNode {

@ -1,4 +1,4 @@
package class07_11;
package class11;
public class Code07_PaperFolding {

@ -1,88 +0,0 @@
package class11_17;
import java.util.ArrayList;
import java.util.List;
public class Code03_PrintAllPermutations {
public static ArrayList<String> permutation(String str) {
ArrayList<String> res = new ArrayList<>();
if (str == null || str.length() == 0) {
return res;
}
char[] chs = str.toCharArray();
process(chs, 0, res);
return res;
}
// str[0..i-1]已经做好决定的
// str[i...]都有机会来到i位置
// i终止位置str当前的样子就是一种结果 -> ans
public static void process(char[] str, int i, ArrayList<String> ans) {
if (i == str.length) {
ans.add(String.valueOf(str));
}
// 如果i没有终止i... 都可以来到i位置
for (int j = i; j < str.length; j++) { // j i后面所有的字符都有机会
swap(str, i, j);
process(str, i + 1, ans);
swap(str, i, j);
}
}
public static ArrayList<String> permutationNoRepeat(String str) {
ArrayList<String> res = new ArrayList<>();
if (str == null || str.length() == 0) {
return res;
}
char[] chs = str.toCharArray();
process2(chs, 0, res);
return res;
}
// str[0..i-1]已经做好决定的
// str[i...]都有机会来到i位置
// i终止位置str当前的样子就是一种结果 -> ans
public static void process2(char[] str, int i, ArrayList<String> res) {
if (i == str.length) {
res.add(String.valueOf(str));
return;
}
boolean[] visit = new boolean[26]; // visit[0 1 .. 25]
for (int j = i; j < str.length; j++) {
// str[j] = 'a' -> 0 visit[0] -> 'a'
// str[j] = 'z' -> 25 visit[25] -> 'z'
if (!visit[str[j] - 'a']) {
visit[str[j] - 'a'] = true;
swap(str, i, j);
process2(str, i + 1, res);
swap(str, i, j);
}
}
}
public static void swap(char[] chs, int i, int j) {
char tmp = chs[i];
chs[i] = chs[j];
chs[j] = tmp;
}
public static void main(String[] args) {
String s = "aac";
List<String> ans1 = permutation(s);
for (String str : ans1) {
System.out.println(str);
}
System.out.println("=======");
List<String> ans2 = permutationNoRepeat(s);
for (String str : ans2) {
System.out.println(str);
}
}
}

@ -1,79 +0,0 @@
package class11_17;
public class Code07_Knapsack {
public static int getMaxValue(int[] w, int[] v, int bag) {
return process(w, v, 0, 0, bag);
}
// 不变 w[] v[] bag
// index... 最大价值
// 0..index-1上做了货物的选择使得你已经达到的重量是多少alreadyW
// 如果返回-1认为没有方案
// 如果不返回-1认为返回的值是真实价值
public static int process(int[] w, int[] v, int index, int alreadyW, int bag) {
if (alreadyW > bag) {
return -1;
}
// 重量没超
if (index == w.length) {
return 0;
}
int p1 = process(w, v, index + 1, alreadyW, bag);
int p2next = process(w, v, index + 1, alreadyW + w[index], bag);
int p2 = -1;
if (p2next != -1) {
p2 = v[index] + p2next;
}
return Math.max(p1, p2);
}
public static int maxValue(int[] w, int[] v, int bag) {
return process(w, v, 0, bag);
}
// 只剩下rest的空间了
// index...货物自由选择但是剩余空间不要小于0
// 返回 index...货物能够获得的最大价值
public static int process(int[] w, int[] v, int index, int rest) {
if (rest < 0) { // base case 1
return -1;
}
// rest >=0
if (index == w.length) { // base case 2
return 0;
}
// 有货也有空间
int p1 = process(w, v, index + 1, rest);
int p2 = -1;
int p2Next = process(w, v, index + 1, rest - w[index]);
if(p2Next!=-1) {
p2 = v[index] + p2Next;
}
return Math.max(p1, p2);
}
public static int dpWay(int[] w, int[] v, int bag) {
int N = w.length;
int[][] dp = new int[N + 1][bag + 1];
for (int index = N - 1; index >= 0; index--) {
for (int rest = 1; rest <= bag; rest++) {
dp[index][rest] = dp[index + 1][rest];
if (rest >= w[index]) {
dp[index][rest] = Math.max(dp[index][rest], v[index] + dp[index + 1][rest - w[index]]);
}
}
}
return dp[0][bag];
}
public static void main(String[] args) {
int[] weights = { 3, 2, 4, 7 };
int[] values = { 5, 6, 3, 19 };
int bag = 11;
System.out.println(maxValue(weights, values, bag));
System.out.println(dpWay(weights, values, bag));
}
}

@ -1,82 +0,0 @@
package class11_17;
public class Code08_CardsInLine {
public static int win1(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
return Math.max(
f(arr, 0, arr.length - 1),
s(arr, 0, arr.length - 1)
);
}
// L....R
// F S L+1..R
// L..R-1
public static int f(int[] arr, int L, int R) {
if (L == R) {
return arr[L];
}
return Math.max(
arr[L] + s(arr, L + 1, R),
arr[R] + s(arr, L, R - 1)
);
}
// arr[L..R]
public static int s(int[] arr, int L, int R) {
if (L == R) {
return 0;
}
return Math.min(
f(arr, L + 1, R), // arr[i]
f(arr, L, R - 1) // arr[j]
);
}
public static int win2(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int N = arr.length;
int[][] f = new int[N][N];
int[][] s = new int[N][N];
for(int i = 0; i < N;i++) {
f[i][i] = arr[i];
}
// s[i][i] = 0;
for(int i = 1; i < N;i++) {
int L =0;
int R =i;
while(L < N && R < N) {
f[L][R] = Math.max(
arr[L] + s[L + 1][ R],
arr[R] + s[L][R - 1]
);
s[L][R] = Math.min(
f[L + 1][R], // arr[i]
f[L][R - 1] // arr[j]
);
L++;
R++;
}
}
return Math.max(f[0][N-1], s[0][N-1]);
}
public static void main(String[] args) {
int[] arr = { 4,7,9,5,19,29,80,4 };
// A 4 9
// B 7 5
System.out.println(win1(arr));
System.out.println(win2(arr));
}
}

@ -1,4 +1,4 @@
package class08_12;
package class12;
import java.util.LinkedList;

@ -1,4 +1,4 @@
package class08_12;
package class12;
import java.util.ArrayList;

@ -1,4 +1,4 @@
package class08_12;
package class12;
public class Code03_IsBalanced {

@ -1,4 +1,4 @@
package class08_12;
package class12;
public class Code04_IsFull {

@ -1,4 +1,4 @@
package class08_12;
package class12;
import java.util.ArrayList;

@ -1,4 +1,4 @@
package class08_12;
package class12;
import java.util.ArrayList;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class08_13;
package class13;
import java.util.LinkedList;

@ -1,4 +1,4 @@
package class08_13;
package class13;
import java.util.ArrayList;

@ -1,4 +1,4 @@
package class08_13;
package class13;
import java.util.ArrayList;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class08_13;
package class13;
import java.util.ArrayList;
import java.util.List;

@ -1,10 +1,10 @@
package class09_13;
package class13;
import java.util.Arrays;
import java.util.Comparator;
import java.util.TreeSet;
public class Code01_LowestLexicography {
public class Code05_LowestLexicography {
public static String lowestString1(String[] strs) {
if (strs == null || strs.length == 0) {

@ -1,4 +1,4 @@
package class09_14;
package class14;
import java.util.HashSet;

@ -1,4 +1,4 @@
package class09_14;
package class14;
import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class09_14;
package class14;
import java.util.Arrays;
import java.util.Comparator;

@ -1,4 +1,4 @@
package class09_14;
package class14;
import java.util.Comparator;
import java.util.PriorityQueue;

@ -1,4 +1,4 @@
package class09_14;
package class14;
import java.util.HashMap;
import java.util.List;

@ -1,4 +1,4 @@
package class09_15;
package class15;
// 本题为leetcode原题
// 测试链接https://leetcode.com/problems/friend-circles/

@ -1,4 +1,4 @@
package class09_15;
package class15;
import java.util.ArrayList;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class09_15;
package class15;
import java.util.ArrayList;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.HashSet;
import java.util.LinkedList;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.HashSet;
import java.util.Stack;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.ArrayList;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.ArrayList;
import java.util.Comparator;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.ArrayList;
import java.util.Comparator;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.ArrayList;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.Collection;
import java.util.Comparator;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.Comparator;
import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.HashMap;
import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16;
package class16;
public class Edge {
public int weight;

@ -1,4 +1,4 @@
package class10_16;
package class16;
import java.util.HashMap;
import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16;
package class16;
public class GraphGenerator {

@ -1,4 +1,4 @@
package class10_17;
package class16;
import java.util.ArrayList;

@ -1,4 +1,4 @@
package class10_17;
package class17;
import java.util.HashMap;
import java.util.HashSet;
@ -14,7 +14,7 @@ public class Code01_Dijkstra {
HashSet<Node> selectedNodes = new HashSet<>();
Node minNode = getMinDistanceAndUnselectedNode(distanceMap, selectedNodes);
while (minNode != null) {
// 原始点 -> minNode(跳转点) 最小距离distance
// 原始点 -> minNode(跳转点) 最小距离distance
int distance = distanceMap.get(minNode);
for (Edge edge : minNode.edges) {
Node toNode = edge.to;
@ -55,12 +55,13 @@ public class Code01_Dijkstra {
}
public static class NodeHeap {
private Node[] nodes; // 实际的堆结构
// key 某一个node value 上面堆中的位置
// 堆!
private Node[] nodes;
// node -> 堆上的什么位置?
private HashMap<Node, Integer> heapIndexMap;
// key 某一个节点, value 从源节点出发到该节点的目前最小距离
private HashMap<Node, Integer> distanceMap;
private int size; // 堆上有多少个点
private int size;
public NodeHeap(int size) {
nodes = new Node[size];
@ -76,21 +77,22 @@ public class Code01_Dijkstra {
// 有一个点叫node现在发现了一个从源节点出发到达node的距离为distance
// 判断要不要更新,如果需要的话,就更新
public void addOrUpdateOrIgnore(Node node, int distance) {
if (inHeap(node)) {
if (inHeap(node)) { // update
distanceMap.put(node, Math.min(distanceMap.get(node), distance));
insertHeapify(node, heapIndexMap.get(node));
}
if (!isEntered(node)) {
if (!isEntered(node)) { // add
nodes[size] = node;
heapIndexMap.put(node, size);
distanceMap.put(node, distance);
insertHeapify(node, size++);
}
// ignore
}
public NodeRecord pop() {
NodeRecord nodeRecord = new NodeRecord(nodes[0], distanceMap.get(nodes[0]));
swap(0, size - 1);
swap(0, size - 1); // 0 > size - 1 size - 1 > 0
heapIndexMap.put(nodes[size - 1], -1);
distanceMap.remove(nodes[size - 1]);
// free C++同学还要把原本堆顶节点析构对java同学不必

@ -1,8 +1,8 @@
package class11_17;
package class17;
import java.util.Stack;
public class Code01_Hanoi {
public class Code02_Hanoi {
public static void hanoi1(int n) {
leftToRight(n);
@ -10,7 +10,7 @@ public class Code01_Hanoi {
// 请把1~N层圆盘 从左 -> 右
public static void leftToRight(int n) {
if (n == 1) {
if (n == 1) { // base case
System.out.println("Move 1 from left to right");
return;
}
@ -76,7 +76,6 @@ public class Code01_Hanoi {
}
}
// 1~i 圆盘 目标是from -> to other是另外一个
public static void func(int N, String from, String to, String other) {
if (N == 1) { // base
System.out.println("Move 1 from " + from + " to " + to);
@ -133,8 +132,8 @@ public class Code01_Hanoi {
hanoi1(n);
System.out.println("============");
hanoi2(n);
System.out.println("============");
hanoi3(n);
// System.out.println("============");
// hanoi3(n);
}
}

@ -1,11 +1,12 @@
package class11_17;
package class17;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class Code02_PrintAllSubsquences {
public class Code03_PrintAllSubsquences {
// s -> "abc" ->
public static List<String> subs(String s) {
char[] str = s.toCharArray();
String path = "";
@ -14,19 +15,21 @@ public class Code02_PrintAllSubsquences {
return ans;
}
// str固定不变
// index此时来到的位置, 要 or 不要
// 如果index来到了str中的终止位置把沿途路径所形成的答案放入ans中
// 之前做出的选择就是path
// str 固定参数
// 来到了str[index]字符index是位置
// str[0..index-1]已经走过了之前的决定都在path上
// 之前的决定已经不能改变了就是path
// str[index....]还能决定,之前已经确定,而后面还能自由选择的话,
// 把所有生成的子序列放入到ans里去
public static void process1(char[] str, int index, List<String> ans, String path) {
if (index == str.length) {
ans.add(path);
return;
}
String no = path;
process1(str, index + 1, ans, no);
String yes = path + String.valueOf(str[index]);
process1(str, index + 1, ans, yes);
// 没有要index位置的字符
process1(str, index + 1, ans, path);
// 要了index位置的字符
process1(str, index + 1, ans, path + String.valueOf(str[index]));
}
public static List<String> subsNoRepeat(String s) {
@ -41,9 +44,7 @@ public class Code02_PrintAllSubsquences {
return ans;
}
// str index set
public static void process2(char[] str, int index,
HashSet<String> set, String path) {
public static void process2(char[] str, int index, HashSet<String> set, String path) {
if (index == str.length) {
set.add(path);
return;
@ -55,7 +56,7 @@ public class Code02_PrintAllSubsquences {
}
public static void main(String[] args) {
String test = "aacc";
String test = "acccc";
List<String> ans1 = subs(test);
List<String> ans2 = subsNoRepeat(test);

@ -0,0 +1,110 @@
package class17;
import java.util.ArrayList;
import java.util.List;
public class Code04_PrintAllPermutations {
public static List<String> permutation1(String s) {
List<String> ans = new ArrayList<>();
if (s == null || s.length() == 0) {
return ans;
}
char[] str = s.toCharArray();
ArrayList<Character> rest = new ArrayList<Character>();
for (char cha : str) {
rest.add(cha);
}
String path = "";
f(rest, path, ans);
return ans;
}
public static void f(ArrayList<Character> rest, String path, List<String> ans) {
if (rest.isEmpty()) {
ans.add(path);
} else {
int N = rest.size();
for (int i = 0; i < N; i++) {
char cur = rest.get(i);
rest.remove(i);
f(rest, path + cur, ans);
rest.add(i, cur);
}
}
}
public static List<String> permutation2(String s) {
List<String> ans = new ArrayList<>();
if (s == null || s.length() == 0) {
return ans;
}
char[] str = s.toCharArray();
g1(str, 0, ans);
return ans;
}
public static void g1(char[] str, int index, List<String> ans) {
if (index == str.length) {
ans.add(String.valueOf(str));
} else {
for (int i = index; i < str.length; i++) {
swap(str, index, i);
g1(str, index + 1, ans);
swap(str, index, i);
}
}
}
public static List<String> permutation3(String s) {
List<String> ans = new ArrayList<>();
if (s == null || s.length() == 0) {
return ans;
}
char[] str = s.toCharArray();
g2(str, 0, ans);
return ans;
}
public static void g2(char[] str, int index, List<String> ans) {
if (index == str.length) {
ans.add(String.valueOf(str));
} else {
boolean[] visited = new boolean[256];
for (int i = index; i < str.length; i++) {
if (!visited[str[i]]) {
visited[str[i]] = true;
swap(str, index, i);
g2(str, index + 1, ans);
swap(str, index, i);
}
}
}
}
public static void swap(char[] chs, int i, int j) {
char tmp = chs[i];
chs[i] = chs[j];
chs[j] = tmp;
}
public static void main(String[] args) {
String s = "acc";
List<String> ans1 = permutation1(s);
for (String str : ans1) {
System.out.println(str);
}
System.out.println("=======");
List<String> ans2 = permutation2(s);
for (String str : ans2) {
System.out.println(str);
}
System.out.println("=======");
List<String> ans3 = permutation3(s);
for (String str : ans3) {
System.out.println(str);
}
}
}

@ -1,8 +1,8 @@
package class11_17;
package class17;
import java.util.Stack;
public class Code04_ReverseStackUsingRecursive {
public class Code05_ReverseStackUsingRecursive {
public static void reverse(Stack<Integer> stack) {
if (stack.isEmpty()) {
@ -13,6 +13,9 @@ public class Code04_ReverseStackUsingRecursive {
stack.push(i);
}
// 栈底元素移除掉
// 上面的元素盖下来
// 返回移除掉的栈底元素
public static int f(Stack<Integer> stack) {
int result = stack.pop();
if (stack.isEmpty()) {

@ -1,4 +1,4 @@
package class10_17;
package class17;
public class Edge {
public int weight;

@ -1,4 +1,4 @@
package class10_17;
package class17;
import java.util.HashMap;
import java.util.HashSet;

@ -1,4 +1,4 @@
package class10_16;
package class17;
import java.util.ArrayList;

@ -1,4 +1,4 @@
package class12;
package class18;
public class Code01_RobotWalk {

@ -1,4 +1,4 @@
package class12;
package class18;
import java.util.Arrays;
import java.util.HashMap;

@ -1,4 +1,4 @@
package class12;
package class18;
public class Code03_Knapsack {

@ -1,4 +1,4 @@
package class12;
package class18;
public class Code04_CardsInLine {

@ -1,6 +1,6 @@
package class11_17;
package class18;
public class Code06_ConvertToLetterString {
public class Code05_ConvertToLetterString {
public static int number(String str) {
if (str == null || str.length() == 0) {
@ -13,7 +13,7 @@ public class Code06_ConvertToLetterString {
// i之前的位置如何转化已经做过决定了, 不用再关心
// i... 有多少种转化的结果
public static int process(char[] str, int i) {
if (i == str.length) { // base case
if (i == str.length) {
return 1;
}
if (str[i] == '0') {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save