• LeetCode238除自身以外数组的乘积


    除自身以外数组的乘积

    题目描述:给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

    示例说明请见LeetCode官网。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/product-of-array-except-self/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解法一:数组遍历

    大概的思路是遍历2次数组分别计算前缀乘积和后缀乘积,期间将其相乘,具体处理过程如下:

    • 首先,声明一个和原数组大小相同的数组用于暂存累成的积;
    • 然后,从前往后遍历数组记录每一个位置的前缀累乘积;
    • 然后,从后往前遍历数组并计算每一个位置的后缀累乘积,并且要和上一次遍历得到的前缀累乘积相乘即可得到相应位置的非自身累乘积。

    最后,返回这个暂存数组即为结果。

    import java.util.Arrays;
    
    public class LeetCode_238 {
        public static int[] productExceptSelf(int[] nums) {
            int len = nums.length;
            int[] temp = new int[len];
            // 由于是算乘积,先都初始化为1
            Arrays.fill(temp, 1);
            // 计算前缀和乘积 temp[i]表示第i个数前面所有数的乘积
            for (int i = 1; i < len; i++) {
                temp[i] = temp[i - 1] * nums[i - 1];
            }
            // 递推求后缀和乘积,同时将结果放到前缀和数组中
            // 从后往前,因为要递推后缀和乘积,末尾的初始为1
            for (int i = len - 1, subfixS = 1; i >= 0; i--) {
                // 当前数的乘积结果等于 前缀和乘后缀和
                temp[i] = temp[i] * subfixS;
                // 更新后缀和
                subfixS *= nums[i];
            }
            return temp;
        }
    
        public static void main(String[] args) {
            int[] nums = new int[]{1, 2, 3, 4};
            // 测试用例,期望输出: [24,12,8,6]
            for (int i : productExceptSelf(nums)) {
                System.out.print(i + " ");
            }
        }
    }
    

    【每日寄语】 也许我不是最优秀的,但我是最努力的。

  • 相关阅读:
    debian 降级
    linux 常用查看设备命令
    viewstate
    linux图形界面编程基本知识
    Java 不适合编写桌面应用
    temp
    ASP.NET中26个常用性能优化方法
    三层架构与MVC的关系
    分页查询前台HTML+后台asp.net代码
    windows身份验证登入数据库 iis 无法访问数据库
  • 原文地址:https://www.cnblogs.com/kaesar/p/16179578.html
Copyright © 2020-2023  润新知