zoukankan      html  css  js  c++  java
  • 数组和矩阵问题:不包含本位置值的累乘数组

    题目

      给定一个整型数组 arr, 返回不包含本位置值的累乘数组。例如, arr = [2, 3, 1, 4], 返回 [12, 8, 24, 6], 即除自己外,其他位置上的累乘。

    要求

      时间复杂度为 O(N), 额外空间复杂度为 O(1), 不改变原数组。

    难度

      一星

    解答

      该题可以使用除法实现,结果数组记为 res,所有非零数的累乘积为 all。存在三种可能:

    • 如果数组中不含 0,则设置 res[i] = all / arr[i].
    • 如果数组中有1个0, 对唯一的 arr[i] == 0 的位置令 res[i] = all, 其他位置上的值都为 0.
    • 如果数组中多于1个0, 则 res 的所有位置上的值都为 0.

      具体实现过程请参考如下代码中 product 方法

      

     1 import java.util.Arrays;
     2 
     3 public class Main {
     4     
     5     public static void main(String[] args) {
     6         int[] arr1 = {2,3,1,4};
     7         System.out.println(Arrays.toString(new Main().product(arr1)));//[12, 8, 24, 6]
     8         
     9         int[] arr2 = {2,3,0,4};
    10         System.out.println(Arrays.toString(new Main().product(arr2)));//[0, 0, 24, 0]
    11         
    12         int[] arr3 = {2,0,0,4};
    13         System.out.println(Arrays.toString(new Main().product(arr3)));//[0, 0, 0, 0]
    14     }
    15     
    16     public int[] product(int[] arr){
    17         if(arr == null || arr.length < 2) return arr;
    18         int len = arr.length;
    19         int[] res = new int[len];
    20         int all = 1;
    21         int count = 0;
    22         int zeroIndex = -1;
    23         for(int i = 0; i < len; i++){
    24             if(arr[i] == 0){
    25                 if(++count > 1){//如果数组中多于1个0, 则 res 的所有位置上的值都为 0
    26                     return res;
    27                 }
    28                 zeroIndex = i;
    29             }else{ //all 为所有非零数的累乘积
    30                 all *= arr[i];
    31             }
    32         }
    33         
    34         if(count == 0){//如果数组中不含 0,则设置 res[i] = all / arr[i]
    35             for(int i = 0; i < len; i++){
    36                 res[i] = all / arr[i];
    37             }
    38         }else{//如果数组中有1个0, 对唯一的 arr[i] == 0 的位置令 res[i] = all, 其他位置上的值都为 0.
    39             res[zeroIndex] = all;
    40         }
    41         
    42         return res;
    43     }
    44     
    45 }
  • 相关阅读:
    吴恩达《深度学习》第四门课(3)目标检测(Object detection)
    cnn知识点汇总
    吴恩达《深度学习》第四门课(2)卷积神经网络:实例探究
    吴恩达《深度学习》第四门课(1)卷积神经网络
    解决Eclipse中springBoot中文乱码问题
    SpringBoot返回页面乱码解决
    【Maven】---Linux搭建Nexus3.X私服
    ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值
    Winform打包工具SetupFactory 9 的使用
    PostgreSQL
  • 原文地址:https://www.cnblogs.com/zlxyt/p/10525884.html
Copyright © 2011-2022 走看看