[力扣] 算法 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;
    }
}

[力扣] 算法 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;
    }
}

[力扣] 算法 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;
    }
}