【笔试题-腾讯】给定一个数组a[N],我们希望构造数组b[N]

  腾讯2012实习生笔试题(加分题):

  给定一个数组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]外,不可使用新的变量(包括栈临时变量、对空间和全局静态变量等);
    请用程序实现并简单描述。

  题意应该不难理解,乍一看有点儿无从下手的感觉,思考后没有突破的话就想放弃了。看到网上其他同学也给出了解法,代码很简洁,但是理解起来不是很直观。于是决定在纸上写写画画,写完后恍然大悟。所以,以后遇到问题,没有思路的时候不妨写写画画,保不准在这个过程中就有了思路。看过下面这张图后,就比较容易理解解题代码了。

具体代码的话可以参考CSDN上一位同学写的,代码很简洁,http://blog.csdn.net/wumuzi520/article/details/7841280

 1 void Translate(int a[], int b[], int n)
 2 {
 3     b[0] = 1;
 4     for (int i = 1; i <= n-1; i++)
 5     {
 6         b[i] = b[i-1]*a[i-1];
 7     }
 8
 9     for (int i = n-1; i >= 1; i--)
10     {
11         b[i] *= b[0];
12         b[0] *= a[i];
13     }
14 }

构造b[N]

时间: 2024-10-12 09:03:11

【笔试题-腾讯】给定一个数组a[N],我们希望构造数组b[N]的相关文章

[经典面试题]给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1

[题目] 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1. [分析] 此题也就是求target在数组中第一次出现的位置.这里可能会有人想先直接用原始的二分查找,如果不存在直接返回-1, 如果存在,然后再顺序找到这个等于target值区间的最左位置,这样的话,最坏情况下的复杂度就是O(n)了,没有完全发挥出二分查找的优势. 这里的解法具体过程请参考实现代码与注释. [代码] /*********************************

给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

1 """ 2 #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 3 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 4 解题思路: 5 1.设定一个空字典,去存储列表中的值和值出现的次数 6 2.使用L.count()方法可以统计出L中值出现的次数 7 3.使用sorted方法可以进行排序,sorted(iterable,key,reverse) 8 注意key是函数 9 4.列表中的元祖取值 d[i][j] i是哪一个元祖,j是元祖

腾讯笔试题——腾讯2015春招pc客户端开发练习卷

1. C++题目 静态成员函数(类方法) 下列说法错误的有( ) 正确答案: A C D   你的答案: C D (错误) 在类方法中可用this来调用本类的类方法 在类方法中调用本类的类方法时可直接调用 在类方法中只能调用本类中的类方法 在类方法中绝对不能调用实例方法 解析: 成员方法又称为实例方法 静态方法又称为类方法 其次: a,静态方法中没有this指针 c,可以通过类名作用域的方式调用Class::fun(); d,太绝对化了,在类中申请一个类对象或者参数传递一个对象或者指针都可以调用

2015-4-2的阿里巴巴笔试题:乱序的序列保序输出(bit数组实现hash)

分布式系统中的RPC请求经常出现乱序的情况.写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:123, 4, 567, 8, 9, 10 上述例子中,3到来的时候会发现4,5已经在了.因此将已经满足顺序的整个序列(3, 4, 5)输出为一行. 1 #include<stdio.h> 2 3 int main() 4 { 5 int num ; 6 while(scanf("%d"

腾讯笔试题——腾讯研发工程师B笔试卷

1. C,C++程序内存区 2. IP地址分类: 3.计算机网络知识: 浏览器访问某页面,HTTP协议返回状态码为403时表示:禁止访问 浏览器访问某页面,HTTP协议返回状态码为404时表示:找不到该页面 浏览器访问某页面,HTTP协议返回状态码为500时表示:内部服务器访问 浏览器访问某页面,HTTP协议返回状态码为503时表示:服务器繁忙 4. C++,类的构造 当派生类中不含对象成员时 · 在创建派生类对象时,构造函数的执行顺序是:基类的构造函数→派生类的构造函数: · 在撤消派生类对象

阿里校招:前端线上笔试题--页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动

题目: 请让页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动: <html> <head> <style type="text/css"> .item{ width:20px; height:20px; border-radius:10px; background: blue; position: absolute; }/*border-radius圆角半径*/ #point{ left:95px; top:295px;

python_exercise_给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

# 设定给出的非空数组为list_a,如下list_a = [8,1,3,5,1,2,45,8,5,7,7,8,8,8,8,8,8,5,5] # 将list_a去重,留下唯一值list_a_set = set(list_a) # 将list_a去重后的值作为字典的key放到字典中list_a_dict = {x:None for x in list_a_set} # 遍历将list_a去重后的唯一值,统计唯一值出现的次数.把次数作为字典的value放到字典中for l in list_a_set

经典笔试题:简单实现一个死锁的例子

package com.gaopeng.multithread; /** * 简单实现一个死锁例子 * * @author gaopeng * */ public class DeadLockTest { // 创建资源 private static Object resourceA = new Object(); private static Object resourceB = new Object(); public static void main(String[] args) { //

C++腾讯笔试题

#include <iostream> using namespace std; //产生任意范围的随机数. int Grial(int i,int j ) { int x = 0; while (!(x>=i && x<j)) { x = rand() % j; } return x; } int main() { cout << Grial(4, 100) << endl; return 0; } #include <iostrea