• LeetCode0238.除自身以外数组的乘积


    题目要求

    算法分析

    如果不限制使用除法,

    res[n] = nums[0] * nums[1] * .....* nums[nums.Lenght-1] / nums[n];

    由于限制除法

    res[n] = nums[0] * nums[1] *....* nums[n-1] * nums[n+1] * num[n+2] * ......* nums[nums.Lenght-1];

    可以用两个数组分别存储n取不同值时 nums[0] * nums[1] *....* nums[n-1]  和 nums[n+1] * num[n+2] * ......* nums[nums.Lenght-1] 这两组信息

    即,从左向右的累乘结果,以及从右向左的累乘结果。

    求res[n]时,则用 left[n-1] * right[n+1]即可得。

    另外需要考虑n处于最左端和最右端时的边界情况。

    代码展示(C#)

    public class Solution {
        public int[] ProductExceptSelf(int[] nums) {
            int[] l = new int[nums.Length];
            int[] r = new int[nums.Length];
    
            l[0] = nums[0];
            r[nums.Length-1] = nums[nums.Length-1]; 
    
            for(int i = 1; i < nums.Length; i++){
                l[i] = l[i-1]*nums[i];
            }
            for(int i = nums.Length - 2; i >=0 ; i--){
                r[i] = r[i+1]*nums[i];
            }
            nums[0] = r[1];
            nums[nums.Length-1] = l[nums.Length-2];
            for(int i = 1; i < nums.Length-1; i++){
                nums[i] = l[i-1] * r[i+1];
            }
    
            return nums;
        }
    }

    提交结果

  • 相关阅读:
    css 弹出框
    net stop 出现1060错误
    a href=#与 a href=javascript:void(0) 的区别
    ubuntu如何安装Mac主题
    js arguments.callee & caller的用法及区别
    js函数——setinterval和setTimeout
    highcharts简介
    highcharts柱状图和饼图的数据填充
    jqgrid的外观重绘
    laravel定时任务
  • 原文地址:https://www.cnblogs.com/KingR/p/13046947.html
Copyright © 2020-2023  润新知