zoukankan      html  css  js  c++  java
  • 子数组之和

    题目描述:

      给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置

    样例

      给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].

     1 <?php
     2 /*
     3  * 子数组之后
     4  * 给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置
     5  */
     6 
     7 /**
     8  * 方法一:
     9  * 两次for循环,每次取出一个元素依次与后面的元素相加
    10  */
    11 
    12 function solution1($data)
    13 {
    14     $res = [];//用于存储结果
    15     $sum = 0;//子数组之和
    16     $count = count($data);
    17     for($i=0; $i<$count; ++$i)
    18     {
    19         $sum = $data[$i];
    20         if(0 == $sum)
    21         {
    22             $res[] = [$i, $i];
    23         }
    24         for($j=$i+1; $j<$count; ++$j)
    25         {
    26             $sum += $data[$j];
    27             if(0 == $sum)
    28             {
    29                 $res[] = [$i, $j];
    30             }
    31         }
    32     }
    33     return $res;
    34 }
    35 
    36 /**
    37  * 方法二
    38  * 用一个数组存储当前元素的key以及累加值,若出现两个一样的值,则表示两个一样的值中间的数组之和为0
    39  * [-3, 1, 2, -3, 4]
    40  * key    -1   0   1   2   3   4
    41  * value   0  -3  -2   0  -3   1
    42  * key值在(-1, 2]、(0, 3]之前存在和为0的子数组
    43  */
    44 function solution2($data)
    45 {
    46     $maps[-1] = 0;
    47     $sum = 0;
    48     $res = [];
    49     foreach($data as $k=>$v)
    50     {
    51         $sum += $v;
    52         $maps[$k] = $sum;
    53         if($tmp = array_keys($maps, $sum))
    54         {
    55             foreach($tmp as $value)
    56             {
    57                 $value != $k && $res[] = [$value+1, $k];//maps中存在当前和的值,且不等于key值不等于当前key
    58             }
    59         }
    60     }
    61     return $res;
    62 }
    63  
    64  
    65 function show($info)
    66 {
    67     echo "<pre>";
    68     print_r($info);
    69 }
    70 
    71 $data = [0, -3, 1, 2, 0, -3, 4, -4];
    72 show(solution1($data));
    73 //$data = [-3, 1, 2, -3, 4];
    74 show(solution2($data));
  • 相关阅读:
    Hive:ORC File Format存储格式详解
    tmpfs使用探讨
    Autofs自动挂载探讨
    新建swap分区的规划、挂载和自动挂载示例
    Linux下禁止使用swap及防止OOM机制导致进程被kill掉
    Linux Swap交换分区探讨
    Linux下配置nfs并远程挂载实战探讨
    java.util.NoSuchElementException问题定位
    spark推测执行的坑
    Spark的性能调优杂谈
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/9069868.html
Copyright © 2011-2022 走看看