首页 > 其他分享 >【剑指 Offer】 66. 构建乘积数组

【剑指 Offer】 66. 构建乘积数组

时间:2023-04-15 09:11:50浏览次数:39  
标签:66 乘积 Offer int res 结果 相乘 length 数组

【题目】

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。


示例:

输入: [1,2,3,4,5]
输出: [120,60,40,30,24]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/gou-jian-cheng-ji-shu-zu-lcof

【思路】

1.从左往右,依次记录数组的每个数左边相乘的结果,其中第一个数左边没有数,记为1;

2.从右往左,依次将上面的记录乘上每个数右边相乘的结果,其中最后一个数右边没有数,记为1。

 

【代码】

class Solution {     public int[] constructArr(int[] a) {         //先计算左乘的数组的结果         //再遍历计算右乘的结果
        int length = a.length;         int res[]  = new int[length];         //先把数组更新成 左边的数相乘的结果         for(int i =0,curL = 1;i<length;curL*=a[i],i++){             res[i] = curL;         }         //再从右往左 乘上右边数相乘 得到答案         for(int i =length-1, curR = 1;i>=0;curR*=a[i],i--){             res[i]*=curR;         }         return res;     } }

标签:66,乘积,Offer,int,res,结果,相乘,length,数组
From: https://www.cnblogs.com/End1ess/p/17320499.html

相关文章

  • 用 Go 剑指 Offer 56 - I. 数组中数字出现的次数
    一个整型数组nums里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例1:输入:nums=[4,1,4,6]输出:[1,6]或[6,1]示例2:输入:nums=[1,2,10,4,1,4,3,3]输出:[2,10]或[10,2]限制:2<=nums.length......
  • 用 Go 剑指 Offer 31. 栈的压入、弹出序列 (辅助栈)
    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。示例1:输入:pushe......
  • (动态规划)剑指 Offer 14- II. 剪绳子 II
    题目描述:给你一根长度为n的绳子,请把绳子剪成整数长度的m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]...k[m-1]。请问k[0]*k[1]*...*k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案......
  • 动态规划:剑指 Offer 14- I. 剪绳子
    题目描述:给你一根长度为n的绳子,请把绳子剪成整数长度的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]...k[m-1]。请问k[0]*k[1]*...*k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。  提......
  • HDU 1166 敌兵布阵(线段树)
    题目地址:HDU1166听说胡浩版的线段树挺有名的。于是就拜访了一下他的博客。详情戳这里。于是就完全仿照着胡浩大牛的风格写的代码。至于原理,鹏鹏学长已经讲的再清晰不过了。我就在下面的代码注释中将原理说明一下吧。来纪念第一发线段树。下面是代码+注释。#include<iostream>#in......
  • 剑指 Offer 09. 用两个栈实现队列 && leetcode225.用队列实现栈
     剑指Offer09.用两个栈实现队列 classCQueue{private:stack<int>inStack,outStack;voidin2out(){//这里必须是while循环,如果是if判断,则输出栈日常只有一个值,没有起到先入后出的作用while(!inStack.empty()){//将输入栈栈顶......
  • 剑指 Offer 62. 圆圈中最后剩下的数字
    题目链接:剑指Offer62.圆圈中最后剩下的数字方法:约瑟夫环+倒推解题思路假设我们最好剩余的数字是\(N\)。执行完"删除第三个元素"的操作后,\(N\)在新数组中的位置\(P\)的意义是什么?它表示,在新数组中,\(N\)前面有还有\(P\)个元素。那么,在当前数组中,\(N\)前面一定有......
  • 66、K8S-部署管理-Helm-自定义helm项目
    1、自定义helm项目管理-实践1.1、自定义helm项目1.1.1、创建存放的目录mkdir-p/opt/custom_helm&&cd/opt/custom_helm1.1.2、创建helm项目helmcreatenginx1.2.3、目录的解析custom_helm]#treenginx/nginx/-自动生成的空ch......
  • AP6608高效率1.2MHz 2-24V 2A升压转换IC
    FEATURES•Integrated80mΩPowerMOSFET•2Vto24VInputVoltage•1.2MHzFixedSwitchingFrequency•Internal4ASwitchCurrentLimit•AdjustableOutputVoltage•InternalCompensation•Upto28VOutputVoltage•AutomaticPulseFrequencyModulatio......
  • adb命令获取android app FPS 执行命令后只出现一行16666666的解决方案
    一、问题描述使用命令command='adbshelldumpsysSurfaceFlinger--latency{}/{}#0'.format(package_name,activity)获取androidapp的fps数据,执行命令后街股票打印如下:  二、问题分析1、刚开始以为是命令里面的SurfaceView写的有问题,执行命令adbshelldumpsys......