Python程序员面试算法宝典---解题总结: 第4章 数组 4.19 如何按要求构造新的数组

本文是Python程序员面试的算法解题总结,聚焦在数组问题上。第4章探讨了如何根据特定要求构建新的数组,特别是第4.19节详细阐述了一种创新的数组构造方法,为面试中的算法题提供了实用的解决思路。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第4章 数组 4.19 如何按要求构造新的数组

题目:
给定一个数组a[N],希望构造一个新的数组b[N],其中
b[i]=a[0]*a[1]*....a[N-1]/a[i]。
在构造数组的过程中,有如下几点要求:
(a) 不允许使用除法
(b) 要求O(1)空间复杂度和O(N)时间复杂度;
(c) 除遍历计数器与a[N]、b[N]外,不可以使用新的变量(
包括栈临时变量、堆空间和全局静态变量等);
(d) 请使用程序实现并简单描述

分析:

关键:
1 书上解法
还是用累乘法
令b[i]=b[i-1]*a[i-1]=a[0]*a[1]*...*a[i-1]
只要令b[i]再乘以a[i+1]*...*a[N-1]
然后令b[0]=a[N-1]
令b[i] *= b[0],
  b[0] *= a[i]
这样,就可以得到真正的b[i]

2 我没想到
是因为忘记用累乘法,正向遍历数组和反向遍历数组


参考:
Python程序员面试算法宝典
'''

def constructArray(array, newArray):
    if not array:
        return
    if not newArray:
        return
    newArray[0] = 1
    size = len(array)
    # 正向遍历数组
    for i in range(1, size):
        newArray[i] = newArray[i - 1] * array[i - 1]
    newArray[0] = array[size - 1]
    for i in range(size - 2, 0, -1):
        newArray[i] *= ne
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值