剑指offer66(Java)-构建乘积数组(中等)
题目:
给定一个数组 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/gou-jian-cheng-ji-shu-zu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
结果集中的任何一个元素 = 其左边所有的元素乘积 * 其右边所有元素的乘积,故可以这样:
一共遍历a数组两次,一次正向遍历,一次逆向遍历。
- 正向遍历:创建辅助数组bb,其中left[i] = a[0] * a[1] ...* a[i-1] = left[i-1] * a[i-1],例如[1,2,3,4,5,6],left[2] = 1 * 2,left[3] = 1* 2 * 3 = left[2] * a[2]
- 逆向遍历:当遍历至下标 i 时,right[i] = a[i+1] * a[i+2]... * a[n-1] = right[i+1] * a[i+1],例如[1,2,3,4,5,6],right[3] = 5 * 6,right[2] = 4* 5 * 6 = right[3] * a[3]
最后将b[i] = 正向遍历的结果 * 逆向遍历的结果,即b[i] = left[i] * right[i]。
代码:
1 class Solution {
2 public int[] constructArr(int[] a) {
3 int len = a.length;
4 if ((len == 0) || a == null) return new int[0];
5 int[] b = new int[len];
6 int[] left = new int[len];
7 //初始化a[0]左边的乘积为1
8 left[0] = 1;
9 for (int i = 1; i < len; i++){
10 left[i] = left[i-1] * a[i-1];
11 }
12 int[] right = new int[len];
13 //初始化a[len-1]右边的乘积为1
14 right[len - 1] = 1;
15 for (int i = len - 2; i >= 0; i--){
16 right[i] = right[i+1] * a[i+1];
17 }
18 for(int i = 0; i < len; i++){
19 b[i] = left[i] * right[i];
20 }
21 return b;
22 }
23 }
参考:k神评论区各位老师的题解
剑指offer66(Java)-构建乘积数组(中等)的更多相关文章
- 剑指 Offer 66. 构建乘积数组 + 思维
剑指 Offer 66. 构建乘积数组 Offer_66 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarre ...
- 剑指offer 66. 构建乘积数组(Leetcode 238. Product of Array Except Self)
剑指offer 66. 构建乘积数组 题目: 给定一个数组A[0, 1, ..., n-1],请构建一个数组B[0, 1, ..., n-1],其中B中的元素B[i] = A[0] * A[1] * ...
- 力扣 - 剑指 Offer 66. 构建乘积数组
题目 剑指 Offer 66. 构建乘积数组 思路1 按照一般的思路就是将所有的相乘,然后除以每一位数字就是答案,但是题目要求我们不能使用除法,因此我们会想到每次遍历到每个数字的时候,在遍历一遍数组, ...
- 【剑指Offer】构建乘积数组 解题报告(Python)
[剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- 【Java】 剑指offer(66) 构建乘积数组
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定一个数组A[0, 1, …, n-1],请构建一个数组B[ ...
- Go语言实现:【剑指offer】构建乘积数组
该题目来源于牛客网<剑指offer>专题. 给定一个数组A[0,1,-,n-1],请构建一个数组B[0,1,-,n-1],其中B中的元素B[i]=A[0] * A[1] * - * A[i ...
- 剑指Offer 51. 构建乘积数组 (数组)
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...
- [剑指Offer] 51.构建乘积数组
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...
- 【剑指offer】构建乘积数组(注意优化空间)
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不能使用除法 ...
- 【剑指offer】构建乘积数组
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...
随机推荐
- MediaBox音视频终端SDK已适配鸿蒙星河版(HarmonyOS NEXT)
2024年1月,HarmonyOS NEXT 鸿蒙星河版系统开发者预览版开放申请,该系统将只能安装为鸿蒙开发的原生应用,而不再兼容安卓应用.对此,阿里云MediaBox音视频终端SDK产品已实现功能的 ...
- SpringMVC深入总结--Spring中的拦截器
Spring为我们提供了: org.springframework.web.servlet.HandlerInterceptor接口, org.springframework.web.servlet. ...
- B站上传视频时各分辨率最佳的码率及格式参数
相关链接:表格源文件
- JAVA 相关
1. google guava cache 2. presto 3. loadingcache 4. aspect
- View之invalidate,requestLayout,postInvalidate
目录介绍 01.invalidate,requestLayout,postInvalidate区别 02.invalidate深入分析 03.postInvalidate深入分析 04.request ...
- YCProgress自定义百分比进度条
目录介绍 1.本库优势亮点 2.使用介绍 2.1 圆环百分比进度条 2.2 直线百分比进度条 2.3 仿杀毒类型百分比进度条 3.注意要点 4.效果展示 5.其他介绍 1.本库优势亮点 圆环百分比进度 ...
- 记录--Vue中的$attrs你真的会用吗?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 先来看一个业务需求: 项目经常会遇到产品经理要求你做某组件一样的功能,还要在它的基础上增加东西.如何只用少量代码高效的二次封装组件呢? 例 ...
- C# 使用AForge调用摄像头
AForge官网地址:http://www.aforgenet.com/framework/ using System; using System.Collections.Generic; using ...
- Scala 中断循环
一.采用 Scala 自带的函数,退出循环 1 package com.atguigu.break 2 3 object TestBreak { 4 import scala.util.control ...
- 数据解析之Beautifulsoup
一.BeautifulSoup的简单使用 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...