[剑指offer] 其他算法[上]篇

发布时间 2023-09-25 14:41:38作者: Vivid-BinGo

JZ66 构建乘积数组

/* 暴力 */
public class JZ66_1
{
    public static int[] multiply(int[] A)
    {
        int[] res = new int[A.length];
        Arrays.fill(res, 1);
        for (int i = 0; i < A.length; i++)
        {
            for (int j = 0; j < A.length; j++)
            {
                if (j == i) continue;
                res[i] *= A[j];
            }
        }
        return res;
    }
}

/* 根据 i 分成两部分 */
public class JZ66_2
{
    public static int[] multiply(int[] A)
    {
        int[] res = new int[A.length];
        int temp = 1;
        res[0] = 1;
        for (int i = 1; i < A.length; i++)
            res[i] = res[i - 1] * A[i - 1];
        for (int i = A.length - 1; i >= 0; i--)
        {
            res[i] *= temp;
            temp *= A[i];
        }
        return res;
    }
}

JZ50 第一个只出现一次的字符

JZ5 替换空格

JZ21 调整数组顺序使奇数位于偶数前面(一)

JZ39 数组中出现次数超过一半的数字

JZ43 整数中1出现的次数(从1到n整数中1出现的次数)

JZ45 把数组排成最小的数

JZ49 丑数⭐

JZ74 和为S的连续正数序列

JZ57 和为S的两个数字