当前位置: 首页 > news >正文

剑指Offer系列(java版,详细解析)66.构建乘积数组

题目描述

剑指 Offer 66. 构建乘积数组

难度中等108

给定一个数组 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]

提示:

  • 所有元素乘积之和不会溢出 32 位整数
  • a.length <= 100000

测试用例

  • 功能测试(输入数组包含整数、负数、一个0、多个0)
  • 边界值测试(输入数组的长度为0)

题目考点

  • 考察应聘者的发散思维能力。
  • 考察应聘者对数组的理解和编程能力。

解题思路

  1. 从左往右累乘(但是保证B[i] = A[0] *…* A[i-1])
  2. 从右往左累乘(但是保证B[i] = B[i] * A[n-1] * … * A[i + 1])

参考解题

class Solution {
    public int[] constructArr(int[] a) {
        if(a.length == 0) return new int[0];
        int[] b = new int[a.length];
        b[0] = 1;
        int tmp = 1;
        for(int i = 1; i < a.length; i++) {
            b[i] = b[i - 1] * a[i - 1];
        }
        for(int i = a.length - 2; i >= 0; i--) {
            tmp *= a[i + 1];
            b[i] *= tmp;
        }
        return b;
    }
}

补充

通过保存或者利用中间过程是降低时间复杂度的可行方法。

相关文章:

  • 剑指Offer系列(java版,详细解析)67.把字符串转化成整数
  • 剑指Offer系列(java版,详细解析)68.树中两个节点的最低公共祖先
  • Go语言fmt.Sprintf(格式化输出)
  • Go 面试系列:Go interface中nil的比较问题
  • Go 面试系列: new 和 make有什么不同之处呢?
  • Go 面试系列: Goroutine 数量是越多越好吗?设置多少会影响GC调度呢?
  • 什么是读、写扩散?
  • 一文搞定权限设计模型(RBAC,ABAC)超详细图文解析
  • 一文搞定权限管理!授权、鉴权超详细解析
  • Go 中的 JSON如何序列化和反序列化?来看看go的包怎么实现!
  • Go中如何比较两个json?深度优先搜索解决,超详细代码!
  • Go语言实现枚举方法,const和iota结合轻松实现
  • Go msgp序列化使用详解!比Json更快!面试时吊打面试官!
  • 缓存击穿了怎么办?使用singleflight轻松解决!
  • Go中优雅的获取Map元素的多种方法
  • Apache Spark Streaming 使用实例
  • DOM的那些事
  • gulp 教程
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • php面试题 汇集2
  • python3 使用 asyncio 代替线程
  • React-flux杂记
  • select2 取值 遍历 设置默认值
  • sessionStorage和localStorage
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Yii源码解读-服务定位器(Service Locator)
  • 前端性能优化——回流与重绘
  • 译米田引理
  • Hibernate主键生成策略及选择
  • (1)Android开发优化---------UI优化
  • (4)logging(日志模块)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (六)c52学习之旅-独立按键
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (转)linux下的时间函数使用
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Micro Framework初体验
  • .NET 中 GetProcess 相关方法的性能
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [] 与 [[]], -gt 与 > 的比较
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ABC294Ex] K-Coloring
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [docker]docker网络-直接路由模式
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
  • [LLM]大模型八股知识点(一)
  • [mvc] 简单的forms认证