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