学习中的算法
CouriourC Lv4

洗牌算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface Card {
id: number,
name: string
}
type Cards<Card> = Card[];

type Pos = number;

function shuffle<Card>(cards: Cards<Card>):void {
const len = cards.length;
for (let cur = 0; cur < len ;cur++ ) {
const pos:Pos = ~~(Math.random()*len);
[cards[pos],cards[cur]] = [cards[cur],cards[pos]];
}
}


1
2
3
4
5
6
7
8
import random
def shuffle(cards: int[]):
i:int = len(cards) - 1
while i:
i -= 1
pos = random.randint(0,len(cards))
cards[i],cards[pos] = cards[pos],cards[i]
shuffle([1,2,3])

循环打印数组

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
import "dart:math" as math;

enum Direction {
top,
left,
right,
bottom
}

void main() {
Direction cur_direction = Direction.top;
int circle = 1;
int curX = 0;
int curY = 0;
List<int> arr = [
0,1,2,
3,4,5,
6,7,8,
];
List<int> res = [];
int width = math.sqrt(arr.length).toInt();

while (circle < width - 1) {
// 当前环 \\
// 执行第一轮 \\
if (cur_direction == Direction.top) {
while (curX < width - circle) {
res.add(arr[curX + curY * width]);
curX++;
}
cur_direction = Direction.left;
}
if (cur_direction == Direction.left) {
while (curY < width - circle) {
res.add(arr[curX + curY * width]);
curY++;
}
cur_direction = Direction.bottom;
}
if (cur_direction == Direction.bottom) {
while (curX > circle - 1) {
res.add(arr[curX + curY * width]);
curX--;
}
cur_direction = Direction.right;
}
if (cur_direction == Direction.right) {
while (curY > circle - 1) {
res.add(arr[curX + curY * width]);
curY--;
}
cur_direction = Direction.top;
}
circle++;
}
print(res);
}

KMP Next 数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14


List<int> getNext(String text){
List<int> next = List.generate(text.length,(_)=> -1);
int prefix = -1;
int suffix = 0;

while (suffix < text.length) {
if (suffix === -1 || )
}
}
void main(){
print(getNext("ababa"));
}

前缀树

 评论