LeetCode Top 100 Liked Questions 238. Product of Array Except Self (Java版; Medium)

welcome to my blog

LeetCode Top 100 Liked Questions 238. Product of Array Except Self (Java版; Medium)

题目描述
Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the
product of all the elements of nums except nums[i].

Example:

Input:  [1,2,3,4]
Output: [24,12,8,6]
Note: Please solve it without division and in O(n).

Follow up:
Could you solve it with constant space complexity? (The output array does not count as extra space for 
the purpose of space complexity analysis.)
第一次做; 核心:这道题主要是得有这么个意识: 不一定一次性求出结果; 可以先都求一部分, 然后再都求另一部分; temp的作用: 记录台阶; 两个做法都是遍历两遍数组, 区别在于在第二个for循环中, temp的位置不同, 这涉及到initialize → (execute → update)^n
/*
input:[1,2,3,4]
output:
res0=1  b1 b2 b3
res1=a1 1  b2 b3
res2=a1 a2 1  b3
res3=a1 a2 a3 1

res数组中的每个元素都由左右两部分构成
核心:这道题主要是要有这么个认识,就是说不是非得一次就把结果求出来
*/
class Solution {
    public int[] productExceptSelf(int[] nums) {
        if(nums==null || nums.length==0)
            return nums;
        int[] res = new int[nums.length];
        //通过两遍遍历可以获得完整的结果
        //
        res[0] = 1;
        for(int i=1; i<nums.length; i++){
            res[i] = res[i-1]*nums[i-1];
        }
        int temp = 1;
        for(int i=nums.length-2; i>=0; i--){
            temp = temp*nums[i+1];
            res[i] = res[i] * temp;
        }
        return res;
    }
}
第一次做; 核心:这道题主要是得有这么个意识: 不一定一次性求出结果; 可以先都求一部分, 然后再都求另一部分; temp的作用: 记录台阶; 两个做法都是遍历两遍数组, 区别在于在第二个for循环中, temp的位置不同, 这涉及到initialize → (execute → update)^n
/*
input:[1,2,3,4]
output:
res0=1  b1 b2 b3
res1=a1 1  b2 b3
res2=a1 a2 1  b3
res3=a1 a2 a3 1

res数组中的每个元素都由左右两部分构成
核心:这道题主要是要有这么个认识,就是说不是非得一次就把结果求出来
*/
class Solution {
    public int[] productExceptSelf(int[] nums) {
        if(nums==null || nums.length==0)
            return nums;
        int[] res = new int[nums.length];
        //通过两遍遍历可以获得完整的结果
        //
        res[0] = 1;
        for(int i=1; i<nums.length; i++){
            res[i] = res[i-1]*nums[i-1];
        }
        int temp = 1;
        for(int i=nums.length-1; i>=0; i--){
            res[i] = res[i] * temp;
            temp = temp*nums[i];
        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值