分类: C#
[力扣] 算法 12 (C#)
[力扣] 算法 1175 (C#)
1175. 质数排列
public class Solution {
const int MOD = 1_000_000_007;
public int NumPrimeArrangements(int n)
{
var cnt = PrimeCount(n);
var f = Factorial(Math.Max(cnt, n - cnt));
return (int)(f[cnt] * f[n - cnt] % MOD);
}
int PrimeCount(int n)
{
var ba = new BitArray(n + 1);
var ret = 0;
for (var i = 2; i <= n; i++)
{
if (!ba[i])
{
ret++;
for (var j = 2 * i; j <= n; j += i)
ba[j] = true;
}
}
return ret;
}
long[] Factorial(int max)
{
var ret = new long[max + 1];
ret[0] = 1;
for (var i = 1; i < ret.Length; i++)
ret[i] = ret[i - 1] * i % MOD;
return ret;
}
}
[力扣] 算法 867 (C#)
867. 转置矩阵
public class Solution
{
public int[][] Transpose(int[][] matrix)
{
var rows = matrix.Length;
var cols = matrix[0].Length;
var ret = new int[cols][];
for (var i = 0; i < cols; i++)
{
ret[i] = new int[rows];
for (var j = 0; j < rows; j++)
ret[i][j] = matrix[j][i];
}
return ret;
}
}
[力扣] 算法 832 (C#)
832. 翻转图像
public class Solution
{
public int[][] FlipAndInvertImage(int[][] A)
{
for (var i = 0; i < A.Length; i++)
{
var left = 0;
var right = A[0].Length - 1;
while(left < right)
{
if ((A[i][left] ^ A[i][right]) == 0)
{
A[i][left] ^= 1;
A[i][right] ^= 1;
}
left++;
right--;
}
}
if (A[0].Length % 2 == 1)
{
var mid = A[0].Length / 2;
for (var i = 0; i < A.Length; i++)
{
A[i][mid] ^= 1;
}
}
return A;
}
}
[力扣] 算法 1431 (C#)
public class Solution {
public IList<bool> KidsWithCandies(int[] candies, int extraCandies) {
var max = candies[0];
foreach (var candy in candies.AsSpan(1))
if (candy > max) max = candy;
var ret = new bool[candies.Length];
for(var i = 0; i < candies.Length; i++)
ret[i] = candies[i] + extraCandies >= max;
return ret;
}
}
[力扣] 算法 1758 (C#)
1758. 生成交替二进制字符串的最少操作数
public class Solution {
public int MinOperations(string s) {
var (turn0, turn1) = (0, 0);
(s[0] == '1' ? ref turn0 : ref turn1) = 1;
foreach (var ch in s.AsSpan(1))
{
(turn0, turn1) = (turn1, turn0);
(ch == '1' ? ref turn0 : ref turn1)++;
}
return Math.Min(turn0, turn1);
}
}
[力扣] 算法 9 (C#)
9. 回文数
public class Solution {
public bool IsPalindrome(int x) {
if (x < 0)
return false;
var y = x;
var z = 0L;
while (x != 0)
{
z *= 10;
z += x % 10;
x /= 10;
}
return y == z;
}
}
[力扣] 算法 1052 (C#)
1052. 爱生气的书店老板
public class Solution {
public int MaxSatisfied(int[] customers, int[] grumpy, int X) {
var ret = 0;
for (var i = 0; i < customers.Length; i++)
if (grumpy[i] == 0)
ret += customers[i];
var sum = 0;
for (var i = 0; i < X; i++)
if (grumpy[i] == 1)
sum += customers[i];
var max = sum;
for (var i = X; i < customers.Length; i++)
{
if (grumpy[i - X] == 1)
sum -= customers[i - X];
if (grumpy[i] == 1)
sum += customers[i];
if (sum > max)
max = sum;
}
return ret + max;
}
}
[力扣] 算法 766 (C#)
766. 托普利茨矩阵
public class Solution {
public bool IsToeplitzMatrix(int[][] matrix) {
for (var i = 1; i < matrix.Length; i++)
for(var j = 1; j < matrix[i].Length; j++)
if (matrix[i][j] != matrix[i - 1][j - 1])
return false;
return true;
}
}