zoukankan      html  css  js  c++  java
  • 主元素

    给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。

    注意事项

    数组中只有唯一的主元素

    样例

    给出数组[1,2,1,2,1,3,3] 返回 1

    挑战

    要求时间复杂度为O(n),空间复杂度为O(1)。

    标签

    LintCode 版权所有 枚举法 贪心 Zenefits

     1 <?php
     2 /**
     3  * 主元素
     4  * 给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一
     5  */
     6 
     7 /**
     8  * 核心思想:一个大小为n的数组中存在一个元素的个数>n/2,则如果用这个数组中的其他的数和该主元素进行抵消的话,最后剩下的一定是主元素,因为主元素的个数最多
     9  * 1.假设数组中第一个元素a(1)为主元素,设count = 1;
    10  * 2.声明一个常量size等于数组的大小;
    11  * 3.a(1)和a(2)相比,相等count++;否则count--; 然后继续比较a(3),以此类推。
    12  * 4.当与a(n)比较后,count = 0时,重新假设a(n+1)为主元素,并继续与a(n+2)作比较。
    13  * 5.当count >= (size-m)/2时,此时假设的主元素a(m)即为实际的主元素。或者遍历完整个数组后,当前假设的主元素为实际主元素。
    14  */
    15 function host_element($data)
    16 {
    17     if(empty($data))
    18     {
    19         return false;
    20     }
    21     $tmp = $data[0];//假设第一个元素为主元素
    22     $count = 1;
    23     $size = count($data);
    24     for($i=1; $i<$size; ++$i)
    25     {
    26         if(0 == $count)
    27         {
    28             $tmp = $data[$i];
    29         }
    30         if($tmp == $data[$i])
    31         {
    32             $count++;
    33         } else {
    34             $count--;
    35         }
    36     }
    37     return $count > 0 ? $tmp : false;
    38 }
    39 
    40 $arr = [1, 1, 1, 1, 2, 2, 2];
    41 $res = host_element($arr);//返回false或者主元素的值
    42 var_dump($res);
  • 相关阅读:
    数字排列问题
    【动态规划】合唱团
    【动态规划】多米诺骨
    【动态规划】抄近路
    【动态规划】拦截导弹
    【动态规划】能量项链
    【动态规划】skiing
    [原创]Devexpress XtraReports 系列 3 创建主从报表
    [原创]Devexpress XtraReports 系列 2 创建表格报表
    [原创]Devexpress XtraReports 系列 1 创建静态报表
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/8763959.html
Copyright © 2011-2022 走看看