题目: 给定一个数组(长度大于1),如下

let a = [1,4,3,4,5]
// 长度不确定,数值为整数

要求写一个函数,返回该数组中,除本身数字之外其他元素的成积.即返回如下:

// 过程[4*3*4*5, 1*3*4*5, 1*4*4*5, 1*4*3*5, 1*4*3*4]
// 结果[240, 60, 80, 60, 48]

题目要求不使用除法,且时间复杂度为o(N)
思路如下:

/*假设返回的数组为 resres[0] = arr[1] * arr[2] * arr[3] * arr[4] res[1] = arr[0] * arr[2] * arr[3] * arr[4]res[2] = arr[0] * arr[1] * arr[3] * arr[4]res[3] = arr[0] * arr[1] * arr[2] * arr[4]res[4] = arr[0] * arr[1] * arr[2] * arr[3]
*/

可以看到,等式右边,可以按照数组的下标分为两部分

即可以看作:

/*res[0] = a[0] * b[0]res[1] = a[1] * b[1]res[2] = a[2] * b[2]res[3] = a[3] * b[3]res[4] = a[4] * b[4]其中: a[0] = 1a[1] = arr[0]a[2] = arr[1] * arr[0]a[3] = arr[2] * arr[1] * arr[0]a[4] = arr[3] * arr[2] * arr[1] * arr[0]进一步:a[0] = 1a[1] = arr[0] * a[0]  =>  arr[0]a[2] = arr[1] * a[1]  =>  arr[1] * arr[0]...a[n] = arr[n-1] * a[n-1]同理:b[n] = 1b[n - 1] = arr[n+1] * b[n + 1]  */

实现如下:

function getArr(arr){let len = arr.length, a = new Array(len).fill(1), b = new Array(len).fill(1), res = []for(let i = 1; i < len; i++){a[i] = arr[i - 1] * a[i -1]}for(let i = len - 2; i > -1; i--){b[i] = arr[i+1] * b[i+1]}for(let i = 0; i<=len - 1; i++){res[i] = a[i] * b[i]}return res
}

说明: 题目源自面试, 思路来自实验室大佬

算法 --- 记一道面试dp算法题相关推荐

  1. webjs求数组的中位数‘_算法:一道常见的数组题,但很多人却写不出来(JAVA)...

    给定两个数组,求数组的中位数 数组 num1=[1,2,3]. 数组num2=[4,5] .中位数=3 解题思路:两个数组合并,放到一个新的数组,数组内的元素要有序.然后就是求中位数的数学方式. [机 ...

  2. 多校一道KMP+DP的题

    难啊,多校当时根本不会做 题目描述 White Cloud has a rectangle carpet of n*m. Grid (i,j) has a color colorA[i][j] and ...

  3. 记一道USB流量分析题

    本文内容全部来自于下面两个博客: USB-HID的初步认识 从CTF中学USB流量捕获与解析 USB协议的数据部分在Leftover Capture Data域之中,在Mac和Linux下可以用tsh ...

  4. dp笔记:关于DP算法和滚动数组优化的思考

    从网上总结了一些dp的套路以及对滚动数组的一些思考,现记录如下,希望以后回顾此类算法时会有所帮助. 目录 1.DP算法经验 1.DP算法核心: 2.DP算法类别以及例题 例1:三步问题 例2:最小路径 ...

  5. 2019多益笔试编程和面试的算法题

    2019多益笔试编程和面试的算法题 多益网络笔试编程题:字符串的指定位数组合 原题概述(只记得大概): 题目解答 多益网络面试算法题:不用比较找出两数中的较大值和较小值 原题概述: 题目解答 代码示例 ...

  6. 面试时算法题的解答思路

    面试中纯粹考算法的问题一般是让很多程序员朋友痛恨的,这里分享下我对于解答算法题的一些思路和技巧. 一般关于算法的文章,都是从经典算法讲起,一种一种算法介绍,见得算法多了,自然就有了感悟,但如此学习花费 ...

  7. [汇总III]微软等公司数据结构+算法面试第1-80题[前80题首次集体亮相]

    [整理III]微软等公司数据结构+算法面试第1-80题汇总 ---首次一次性汇总公布 由于这些题,实在太火了.所以,应广大网友建议要求,在此把之前已整理公布的前80题, 现在,一次性分享出来.此也算是 ...

  8. 给定数组 求和等于固定值 算法_[见题拆题] 大厂面试算法真题解析 - 第一期开张...

    如今想要收获大厂offer,在面试的前几轮,总是躲不开算法这座大山. 常听人说,算法很难.这话没错.算法本身是是一个艰深的方向.但是算法题却有据可循.通过有针对性的学习和练习,我们完全可以掌握解题的基 ...

  9. 蓝桥杯备考-刷题之路-动态规划算法(DP算法)Part1

    之前在刷力扣的时候就是浑浑噩噩的,照着评论区的答案写了一遍就万事大吉了,没有深度思考过.这次备考蓝桥杯看到DP算法的第一道题就不会,更难受的是看答案了依然完全不理解,所以决心把DP算法一次弄懂. 开始 ...

最新文章

  1. C#的UInt64.MaxValue和C语言的0xffffffffffffffc5ull
  2. 文档管理服务器文件的脱机编辑选项无法编辑,让MOSS2007文档的存取更具个性
  3. 【专栏原创]】忘掉一切,从用户场景出发——我在需求上犯过的错
  4. python的两种执行模式_Python运行执行模式
  5. 3.2. @RestController
  6. XML DOM Object Model in .NET [2/3]
  7. VB6 mysql二进制读取,vb6关于VB以二进制(binary)方式读取文本内容
  8. Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)
  9. C++11 后置返回类型
  10. 在iPad/iPhone上使用Firebug
  11. oracle PL/SQL(procedure language/SQL)程序设计之异常(exception)
  12. 模糊 K 均值聚类算法
  13. 阿里云商标自助注册申请快速入门(详细步骤和教程)
  14. ios-GET和POST
  15. 2D转换及相关案例实现
  16. 获取非行内样式代码封装
  17. draw.io 插入 word
  18. 用MATLAB的GUI绘图的一个简单例子
  19. vue学习篇--02内置指令 计算属性 侦听属性
  20. 的确,人在做,天在看

热门文章

  1. linux so_nosigpipe,TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL设置
  2. 查询去重_【Freya的MySQL课堂】DQL基础查询
  3. 【caffe-Windows】caffe+VS2013+Windows+GPU配置+cifar使用
  4. Multiple Dispatch
  5. 20145309信息安全系统设计基础第12周学习总结后篇
  6. 创业感悟:技术兄弟为什么一直没有起来(1)
  7. Android SDK打包
  8. mysql如果数据不存在,则插入新数据,否则更新
  9. aix6.1 nfs
  10. Tip:使用Extender的ResolveControlID事件