Skip to content

Commit a227f32

Browse files
committed
leetcode
1 parent 9cd551b commit a227f32

34 files changed

+2536
-62
lines changed

src/main/java/code/algorithm/recall/EightQueen.java renamed to src/main/java/code/algorithm/backtracking/EightQueen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package code.algorithm.recall;
1+
package code.algorithm.backtracking;
22

33
/**
44
* 〈8皇后问题〉<p>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package code.algorithm.dp;
2+
3+
/**
4+
* 〈一句话功能简述〉<p>
5+
* 〈功能详细描述〉
6+
*
7+
* @author zixiao
8+
* @date 2020/3/6
9+
*/
10+
public class Coin {
11+
12+
public int waysToChange(int n) {
13+
int[] dp = new int[n+1];
14+
dp[0] = 1;
15+
int[] coins = new int[]{1, 5 ,10, 25};
16+
for(int coin : coins){
17+
for(int i=coin; i<=n; i++){
18+
dp[i] = (dp[i] + dp[i-coin])%1000000007;
19+
}
20+
}
21+
return dp[n];
22+
}
23+
24+
public static void main(String[] args) {
25+
Coin coin = new Coin();
26+
coin.waysToChange(30);
27+
}
28+
29+
30+
31+
}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
package code.algorithm.greedy;
2+
3+
import org.springframework.util.Assert;
4+
5+
import java.util.Arrays;
6+
7+
/**
8+
* 〈田忌赛马〉<p>
9+
* 1、田忌和齐王的马都按从慢到快排序
10+
* 2、比较田忌最慢的马比齐王最慢的马
11+
* 2.1 如果田忌最慢马慢,则用田忌最慢马与齐王最快马比赛,最小代价输
12+
* 2.2 如果田忌最慢马快,则用田忌最慢马与齐王最慢马比赛,必赢
13+
* 2.3 如果双方最慢马一样快,则比较田忌最快的马与齐王最快的马
14+
* 2.3.1 如果田忌最快马慢,则用田忌最慢马与齐王最快马比赛,最小代价输
15+
* 2.3.2 如果田忌最快马快,比较田忌最快的马与齐王最快的马比赛,必赢
16+
* 2.3.3 如果双方最快马一样快,则用田忌最慢马与齐王最快马比赛,最小代价输
17+
*
18+
* 注: 最慢/最快的马都是指剩余未比赛过的马中最快/最慢
19+
*
20+
* @author zixiao
21+
* @date 2020/1/16
22+
*/
23+
public class TianjiRace {
24+
25+
/**
26+
* 马数量
27+
*/
28+
private int horseNum;
29+
30+
/**
31+
* 田忌的马
32+
*/
33+
private int[] tianHorses;
34+
35+
/**
36+
* 齐王的马
37+
*/
38+
private int[] kingHorses;
39+
40+
/**
41+
* 田忌马起始位置
42+
*/
43+
private int tianFirst;
44+
45+
/**
46+
* 田忌马终止位置
47+
*/
48+
private int tianLast;
49+
50+
/**
51+
* 齐王马起始位置
52+
*/
53+
private int kingFirst;
54+
55+
/**
56+
* 齐王马终止位置
57+
*/
58+
private int kingLast;
59+
60+
/**
61+
* 田忌得分
62+
*/
63+
private int tianScore;
64+
65+
public void startRace(int[] tHorses, int[] kHorses){
66+
Assert.isTrue(tHorses.length == kHorses.length, "");
67+
this.horseNum = tHorses.length;
68+
this.tianHorses = tHorses;
69+
this.kingHorses = kHorses;
70+
71+
//从慢到快排序
72+
Arrays.sort(this.tianHorses);
73+
Arrays.sort(this.kingHorses);
74+
75+
tianScore = 0;
76+
tianFirst = kingFirst = 0;
77+
tianLast = kingLast = horseNum - 1;
78+
79+
System.out.println("*********** Start horse race ************");
80+
81+
for (int i = 0; i < horseNum; i++) {
82+
race();
83+
}
84+
85+
System.out.println("Tianji score: " + tianScore);
86+
}
87+
88+
private void race(){
89+
//1 比较田忌最慢的马与齐王最慢的马
90+
int compare = tianHorses[tianFirst] - kingHorses[kingFirst];
91+
if(compare < 0){
92+
//1.1 如果田忌最慢马慢,则用田忌最慢马与齐王最快马比赛,最小代价输
93+
race(tianHorses[tianFirst], kingHorses[kingLast]);
94+
tianFirst++;
95+
kingLast--;
96+
}else if(compare > 0){
97+
//1.2 如果田忌最慢马快,则用田忌最慢马与齐王最慢马比赛,必赢
98+
race(tianHorses[tianFirst], kingHorses[kingFirst]);
99+
tianFirst++;
100+
kingFirst++;
101+
}else {
102+
//1.3 比较田忌最快的马与齐王最快的马
103+
int compareFast = tianHorses[tianLast] - kingHorses[kingLast];
104+
if(compareFast < 0){
105+
//1.3.1 如果田忌最快马慢,则用田忌最慢马与齐王最快马比赛,最小代价输
106+
race(tianHorses[tianFirst], kingHorses[kingLast]);
107+
tianFirst++;
108+
kingLast--;
109+
}else if(compareFast > 0){
110+
//1.3.2 如果田忌最快马快,比较田忌最快的马与齐王最快的马比赛,必赢
111+
race(tianHorses[tianLast], kingHorses[kingLast]);
112+
tianLast--;
113+
kingLast--;
114+
}else{
115+
//1.3.3 如果双方最快马一样快,则用田忌最慢马与齐王最快马比赛,最小代价输
116+
race(tianHorses[tianFirst], kingHorses[kingLast]);
117+
tianFirst++;
118+
kingLast--;
119+
}
120+
}
121+
}
122+
123+
/**
124+
* 比赛,赢加1分,输减1分,平局0分
125+
* @param tianHorse
126+
* @param kingHorse
127+
*/
128+
private void race(int tianHorse, int kingHorse){
129+
System.out.println(tianHorse + " => " + kingHorse);
130+
if(tianHorse > kingHorse){
131+
tianScore++;
132+
}else if(tianHorse < kingHorse){
133+
tianScore--;
134+
}
135+
}
136+
137+
/**
138+
*
139+
* @param args
140+
*/
141+
public static void main(String[] args) {
142+
TianjiRace race = new TianjiRace();
143+
// 30 20 10 : 35 25 15
144+
race.startRace(new int[]{30, 20, 10}, new int[]{35, 25, 15});
145+
146+
// 10 20 30 : 10 20 30
147+
race.startRace(new int[]{10, 20, 30}, new int[]{10, 20, 30});
148+
149+
// 8 20 31 : 10 20 30
150+
race.startRace(new int[]{8, 20, 31}, new int[]{10, 20, 30});
151+
152+
}
153+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package code.algorithm.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* 〈和为s的连续正数序列〉<p>
8+
* 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
9+
* 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
10+
*
11+
* 示例 1:
12+
* 输入:target = 9
13+
* 输出:[[2,3,4],[4,5]]
14+
*
15+
* 示例 2:
16+
* 输入:target = 15
17+
* 输出:[[1,2,3,4,5],[4,5,6],[7,8]]
18+
*  
19+
* 限制:
20+
* 1 <= target <= 10^5
21+
*
22+
* 链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof
23+
*
24+
* @author zixiao
25+
* @date 2020/3/6
26+
*/
27+
public class M57 {
28+
29+
static class MN {
30+
int m;
31+
int n;
32+
33+
public MN(int m, int n) {
34+
this.m = m;
35+
this.n = n;
36+
}
37+
}
38+
39+
public int[][] findContinuousSequence(int target) {
40+
if (target <= 2 || target == 4) {
41+
return new int[0][];
42+
}
43+
int max = (target+1)/2;
44+
int l = 1;
45+
int r = 2;
46+
int sum = 0;
47+
for (; l<max; l++){
48+
sum = l;
49+
for(; r<=max; r++){
50+
51+
}
52+
}
53+
54+
55+
return new int[0][];
56+
}
57+
58+
public int[][] findContinuousSequence1(int target) {
59+
if (target <= 2 || target == 4) {
60+
return new int[0][];
61+
}
62+
63+
List<MN> mnList = new ArrayList();
64+
int maxN = (target + 1) / 2;
65+
for (int m = 1; m < maxN; m++) {
66+
for (int n = m + 1; n <= maxN; n++) {
67+
if ((m + n) * (n - m + 1) / 2 == target) {
68+
mnList.add(new MN(m, n));
69+
break;
70+
}
71+
}
72+
}
73+
if (!mnList.isEmpty()) {
74+
int[][] result = new int[mnList.size()][];
75+
for (int i = 0; i < mnList.size(); i++) {
76+
MN mn = mnList.get(i);
77+
result[i] = new int[mn.n - mn.m + 1];
78+
for (int j = mn.m, k = 0; j <= mn.n; j++, k++) {
79+
result[i][k] = j;
80+
}
81+
}
82+
return result;
83+
}
84+
return new int[0][];
85+
}
86+
87+
public static void main(String[] args) {
88+
M57 m57 = new M57();
89+
// m57.findContinuousSequence(1);
90+
m57.findContinuousSequence(9);
91+
}
92+
93+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package code.algorithm.leetcode;
2+
3+
/**
4+
* 〈一句话功能简述〉<p>
5+
* 〈功能详细描述〉
6+
*
7+
* @author zixiao
8+
* @date 2020/3/5
9+
*/
10+
public class P1103 {
11+
12+
public int[] distributeCandies(int candies, int num) {
13+
int[] ans = new int[num];
14+
15+
int round = 0;
16+
int remain = candies;
17+
int num_x_num = num * num;
18+
int n_n_2 = (num_x_num + num) / 2;
19+
while (remain > 0) {
20+
int cost = round * num_x_num + n_n_2;
21+
if (remain >= cost) {
22+
remain -= cost;
23+
round++;
24+
} else {
25+
break;
26+
}
27+
}
28+
29+
if (round == 0) {
30+
for (int i = 0; i < num; i++) {
31+
if (remain == 0) {
32+
break;
33+
}
34+
ans[i] = Math.min(i + 1, remain);
35+
remain -= ans[i];
36+
}
37+
return ans;
38+
}
39+
40+
int round_x_num = round * num;
41+
int rrn2 = (round - 1) * round_x_num / 2;
42+
for (int i = 0; i < num; i++) {
43+
ans[i] = rrn2 + (i + 1) * round;
44+
}
45+
46+
if (remain > 0) {
47+
for (int i = 0; i < num; i++) {
48+
if (remain == 0) {
49+
break;
50+
}
51+
int add = Math.min(round_x_num + i + 1, remain);
52+
ans[i] += add;
53+
remain -= add;
54+
}
55+
}
56+
57+
return ans;
58+
}
59+
60+
public static void main(String[] args) {
61+
P1103 solution = new P1103();
62+
for (int i : solution.distributeCandies(7, 4)) {
63+
System.out.print(i + ",");
64+
}
65+
System.out.println();
66+
67+
for (int i : solution.distributeCandies(10, 3)) {
68+
System.out.print(i + ",");
69+
}
70+
System.out.println();
71+
72+
for (int i : solution.distributeCandies(13, 3)) {
73+
System.out.print(i + ",");
74+
}
75+
System.out.println();
76+
77+
System.out.println(6>>1);
78+
}
79+
80+
}

0 commit comments

Comments
 (0)