这是一道面试亚马逊时的题目,要求Time O(n). 我刚开始想的是算出所有的数的总product,再去除以对应位置的元素,但这种做法的问题是若该位置为0,就会报错。

到网上搜了下,才知道,原来有这种做法。

e.g. arr = {0,1,2,3},生成两个array: upArr = {1,arr[0],
arr[0]*arr[1],arr[0]*arr[1]*arr[2]}

downArr = {arr[0]*arr[1]*arr[2],arr[1]*arr[2],
arr[2],1}

最后的结果res就是upArr 和 downArr 对应的位置相乘即可。Time O(n).

Note: 1.System.out.println arr 时可用 Arrays.toString(arr).

AC Java:

import java.util.*;
public class productOthers{
public static void main(String [] args){
int[] myArr = {0,1,2,3,4};
int[] myArr2 = {2,4,3,5};
int[] myArr3 = null;
System.out.println(Arrays.toString(productOthers(myArr)));
System.out.println(Arrays.toString(productOthers(myArr2)));
System.out.println(Arrays.toString(productOthers(myArr3))); }
private static int [] productOthers(int [] arr){
if(arr == null || arr.length == 0)
return null;
int[] upArr = new int[arr.length];
int[] downArr = new int[arr.length]; int[] res = new int[arr.length]; upArr[0] = 1;
int mul1 = arr[0];
for(int i = 1; i < upArr.length; i++){
upArr[i] = mul1;
mul1*=arr[i];
}
// System.out.println(Arrays.toString(upArr)); downArr[downArr.length-1] = 1;
mul1 = arr[arr.length-1];
for(int i = downArr.length-2;i>=0;i--){
downArr[i] = mul1;
mul1*=arr[i];
}
// System.out.println(Arrays.toString(downArr)); for(int i = 0; i<arr.length; i++){
res[i] = upArr[i]*downArr[i];
}
return res;
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Interview Return Products of All Other Elements in Array的更多相关文章

  1. Javacript Remove Elements from Array

    參考自: https://love2dev.com/blog/javascript-remove-from-array/ 1. Removing Elements from End of Array ...

  2. max (Largest elements in array)

    句法: M = max(A) M = max(A,[],dim) [M,I] = max(___) C = max(A,B) ___ = max(___,nanflag)   描述: M=max(A) ...

  3. 最近学习的 Node.js 基础:安装、环境配置、forever

    最近工作中,因为某某某某原因,需要用到Node.js  . 发现在很多方面和python很像,比如generator / yield ,比如模块的使用方式,比如http模块. 先安装个环境,windo ...

  4. openLayer3地图的使用心得

    准备运行环境: 1)Portable Basemap Server(PBS)用于创建地图服务 官网网址:http://geopbs.codeplex.com/ 如何创建底图服务?操作步骤如下: 如果启 ...

  5. [LeetCode] Top K Frequent Elements 前K个高频元素

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  6. LeetCode Minimum Moves to Equal Array Elements II

    原题链接在这里:https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/ 题目: Given a non-empt ...

  7. LeetCode 【347. Top K Frequent Elements】

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  8. (Collection)347. Top K Frequent Elements

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  9. Leetcode 347. Top K Frequent Elements

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

随机推荐

  1. Git Shell 安装版本

    #!/bin/sh v1.; do echo "Begin install Git $ver."; git reset --hard git clean -fdx git chec ...

  2. winform学习-----理解小概念-20160517

    1.MouseDown事件 当鼠标指针位于控件上并按下鼠标键时发生. 2.MouseUp事件 当鼠标指针在控件上并释放鼠标按键时发生. 与 mouseout 事件不同,只有在鼠标指针离开被选元素时,才 ...

  3. ArcEngine 异常:field is not editable

    字段不可编辑. Access数据库默认第一个字段为ID字段,不可修改.所以,在新建字段时,第一个字段为ObjectID字段,如果没有建立该字段,则把另外的字段作为 不可修改的ID字段,造成field ...

  4. windows 下安装Yii2 高级版本

    1.  首先安装 Composer 2.  执行  composer global require "fxp/composer-asset-plugin:~1.1.1" 3. 执行 ...

  5. 修改编码格式MySQL

    修改字符集的方法,就是使用mysql的命令 mysql> SET character_set_client = utf8 ; mysql> SET character_set_connec ...

  6. HDU 1078 FatMouse and Cheese(记忆化搜索)

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  7. Sql Group by 使用

    CREATE TABLE StuCourseScore ( ID int, Name nvarchar(10), Course nvarchar(10), Score int ) INSERT Stu ...

  8. windows服务器。linux服务器的集成包推荐

    我对linux不熟悉,这个有点不好意思,虽然我是做php开发的.我只是对apache+php+mysql的操作熟悉而已,但是linux的服务器配置什么的都太懂 所以我就安装了windows2008,安 ...

  9. memcached使用详解

    不错的文章 http://www.ttlsa.com/memcache/memcached-description/

  10. P2409 Y的积木

    luogu月赛 暴力dfs,估计过不了几个点,大概也就得30分左右? #include <bits/stdc++.h> using namespace std; const int max ...