用栈实现队列

LeetCode 232

用队列实现栈

LeetCode 225

洗牌算法

在 C# 中实现洗牌算法最常用的方法是 Fisher-Yates 洗牌算法。这个算法的效率很高,时间复杂度是 (O(n)),且能确保每个元素都被均匀随机分布。以下是一个使用 Fisher-Yates 算法的 C# 代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;

public class Shuffler
{
private static Random random = new Random();

public static void Shuffle<T>(T[] array)
{
for (int i = array.Length - 1; i > 0; i--)
{
int j = random.Next(0, i + 1); // 生成一个 0 到 i 之间的随机数
// 交换 array[i] 和 array[j]
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}

二叉树的前序遍历

LeetCode 144

二叉树的中序遍历

二分查找

LeetCode 704

快速排序

加一

LeetCode 66

斐波那契数列

LeetCode 509

数组中的第 K 个最大元素

LeetCode 215

最大子数组和

LeetCode 53

最长递增子序列

LeetCode 300

删除链表倒数第 n 个节点

LeetCode 19

相交链表

LeetCode 160

数字序列分组

需要把数组里的数(每个数的取值都是 1-9)分成多个小组,分小组的规则是:3 个相同的数或者 3 个连续的数,当所有的数都可以被分组,则为完全分组。

设计一个算法,判断数组是否能完全分组。

例如[1, 1, 2, 2, 2, 3, 3, 3, 4],可分为 123 123 234(完全分组),

注意:若先把 222 333 分为一组,则会导致出现 bug,判断为不可完全分组。