给定数组a[N]构造数组b[N]
转自:http://blog.csdn.net/wumuzi520/article/details/7841280
给定一个数组a[N],我们希望构造数组b [N],
其中b[j]=a[0]*a[1]…a[N-1] / a[j],
在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间复杂度;
除遍历计数器与a[N] b[N]外,不可使用新的变量
(包括栈临时变量、堆空间和全局静态变量等)
解析:设b[0]=1
由b[i]=b[i-1]*a[i-1]可得
b[1] = a[0]
b[2] = a[0]a[1]
…
b[i] = a[0]a[1]a[2]…a[i-1]
…
b[n-1] = a[0]a[1]…a[n-2]
那么再通过b[0]这个变量来迭代出
1, a[n-1], a[n-2]a[n-1], a[n-3]a[n-2]a[n-1], … , a[1]a[2]a[3]…a[n-1],
迭代过程中分别乘以b[n-1], b[n-2], … , b[0]
- /*************************************************************************
- > File Name: 给定数组a[N]构造数组b[N].c
- > Author: Juntaran
- > Mail: JuntaranMail@gmail.com
- > Created Time: 2016年08月24日 星期三 16时47分25秒
- ************************************************************************/
- /*
- 给定一个数组a[N],我们希望构造数组b [N],
- 其中b[j]=a[0]*a[1]…a[N-1] / a[j],
- 在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间复杂度;
- 除遍历计数器与a[N] b[N]外,不可使用新的变量
- (包括栈临时变量、堆空间和全局静态变量等)
- 解析:设b[0]=1
- 由b[i]=b[i-1]*a[i-1]可得
- b[1] = a[0]
- b[2] = a[0]a[1]
- …
- b[i] = a[0]a[1]a[2]…a[i-1]
- …
- b[n-1] = a[0]a[1]…a[n-2]
- 那么再通过b[0]这个变量来迭代出
- 1, a[n-1], a[n-2]a[n-1], a[n-3]a[n-2]a[n-1], … , a[1]a[2]a[3]…a[n-1],
- 迭代过程中分别乘以b[n-1], b[n-2], … , b[0]
- */
- #include <stdio.h>
- void Translate(int a[], int b[], int n)
- {
- b[] = ;
- for (int i = ; i < n; ++i)
- {
- b[i] = b[i-] * a[i-];
- }
- for (int i = ; i < n; ++i)
- {
- printf("b[%d] is %d\n", i, b[i]);
- }
- printf("\n");
- for (int i = n-; i >= ; --i)
- {
- b[i] *= b[];
- b[] *= a[i];
- }
- for (int i = ; i < n; ++i)
- {
- printf("b[%d] is %d\n", i, b[i]);
- }
- printf("\n");
- }
- int main()
- {
- int a[] = {,,,};
- int b[] = {,,,};
- Translate(a, b, );
- for (int i = ; i < ; ++i)
- {
- printf("%4d ", a[i]);
- }
- printf("\n");
- for (int i = ; i < ; ++i)
- {
- printf("%4d ", b[i]);
- }
- printf("\n");
- }
给定数组a[N]构造数组b[N]的更多相关文章
- 【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]
[来源]:腾讯2013实习生笔试 给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]-a[N-1] / a[j])空间复杂度和O(n)的时间复杂度:除遍历计数器与a ...
- 算法进阶面试题03——构造数组的MaxTree、最大子矩阵的大小、2017京东环形烽火台问题、介绍Morris遍历并实现前序/中序/后序
接着第二课的内容和带点第三课的内容. (回顾)准备一个栈,从大到小排列,具体参考上一课.... 构造数组的MaxTree [题目] 定义二叉树如下: public class Node{ public ...
- LintCode2016年8月22日算法比赛----将数组重新排序以构造最小值
将数组重新排序以构造最小值 题目描述 给定一个整数数组,请将其重新排序,以构造最小值. 样例 给定[3,32,321],通过将数组重新排序,可构造6个可能性的数字: 3+32+321=332321 3 ...
- LintCode-379.将数组重新排序以构造最小值
将数组重新排序以构造最小值 给定一个整数数组,请将其重新排序,以构造最小值. 注意事项 The result may be very large, so you need to return a st ...
- 已知一个数组a[N]来构造数组b[N]的有趣算法题
给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i].在构造过程要求满足:1.不使用除法:2.O(1)空间复杂度和O(n)时间复杂度:3.除 ...
- ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)
1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 112[ ...
- 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...
- 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组
题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...
- 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素
/** * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 能够假定数组元素原先是按从小到大的顺序排列的. */ /** * 思路:数组 ...
随机推荐
- Spring REST实践之Documenting REST Services
Swagger基本介绍 Swagger是创建交互式REST API文档的规范和框架,它能自动同步REST服务的任何变化,同时为生成API客户端代码提供了一套工具和SDK生成器.Swagger规范由两种 ...
- ckeditor 升级到 4.5
原来的项目用的是4.0+asp.net 3.5的,一直不错,这两天升级一下ckeditor到最新版4.5.1,用的是chrome浏览器测试,发觉TextBox.Text获取不到数据,在页面用js写do ...
- Kettle 创建 Transformation
1.第一步,先准备数据和工具 安装好mysql以及客户端工具 数据: USE `test`; CREATE TABLE `account` ( `id` int(11) NOT NULL AUTO ...
- CSS line-height 和 vertical-align 精解(下篇)
申明本文转自:http://hi.baidu.com/wolongxzg/item/2383860ec8ac8b173a53eeb0 vertical-align 7.4.1 语法 vertical- ...
- BeanFactory和ApplicationContext的作用和区别
BeanFactory和ApplicationContext的作用和区别 作用: 1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责be ...
- EasyMock使用手记
from:http://www.blogjava.net/supercrsky/articles/162766.html Mock 对象能够模拟领域对象的部分行为,并且能够检验运行结果是否和预期的一致 ...
- js面向对象,有利于复用
需求:在网页上添加个天气预报. 以前总是在需要执行js的地方,直接写function(){}.在需要同样功能的地方直接copy,或者稍微修改. 然后在网上看看有没有好点的方法,然后就看到js面向对象编 ...
- GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]
[OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...
- [Express] Level 2: Middleware -- 1
Mounting Middleware Given an application instance is set to the app variable, which of the following ...
- Ubuntu:Target filesystem doesn't have /sbin/init (Slax 解决)
计算机(Ubuntu)因为异常断电或是其它原因,再次启动时.非常不幸的出现: Killed mount: mounting /dev on /root/dev failed: No such file ...