• 第238题:除自身以外数组的乘积


    一. 问题描述

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

    示例:

    输入: [1,2,3,4]

    输出: [24,12,8,6]

    说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。

    进阶:

    你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间)

    二. 解题思路

    本题思路:本题采用双指针的方式进行求解,由于题目要求请不要使用除法,且在 O(n) 时间复杂度内完成此题,所以我们应考虑到常数次的遍历,采用左右指针的方法进行求解。

    步骤一:创建两个长度为n初始化为1的数组fir和sec。

    步骤二:创建左右指针,分别从第二个数和倒数第二个数进行遍历,

    fir[j]=fir[j-1]*nums[j-1];

               sec[m]=sec[m+1]*nums[m+1];

    步骤三:将两个数组对应数组相乘,输出最终数组。

    三. 执行结果

    执行用时 :1 ms, 在所有 java 提交中击败了100.00%的用户

    内存消耗 :43.2 MB, 在所有 java 提交中击败了96.20%的用户

    四. Java代码

    class Solution {
        public int[] productExceptSelf(int[] nums) {
             int []fir=new int[nums.length];
            int []sec=new int[nums.length];
            for(int i=0;i<nums.length;i++) {
                fir[i]=1;
                sec[i]=1;
            }
            for(int j=1,m=nums.length-2;j<nums.length&&m>=0;j++,m--) {
                fir[j]=fir[j-1]*nums[j-1];
                sec[m]=sec[m+1]*nums[m+1];
            }
            for(int k=0;k<nums.length;k++) {
                fir[k]=fir[k]*sec[k];
            }
            return fir;
        }
    }
  • 相关阅读:
    【Opencv】直方图函数 calchist()
    【Lintcode】070.Binary Tree Level Order Traversal II
    【C++】*p++ = *p不同环境下操作不同
    【Python】String 字符串
    【Python】File IO
    栈和队列
    链表
    printf 的格式
    Linux的基本指令--
    机器人的运动范围
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/12093297.html
Copyright © 2020-2023  润新知