码迷,mamicode.com
首页 > 其他好文 > 详细

主元素

时间:2018-04-10 03:48:07      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:数组元素   lint   code   tmp   空间复杂度   注意事项   tco   return   lintcode   

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

注意事项

数组中只有唯一的主元素

样例

给出数组[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);

 

主元素

标签:数组元素   lint   code   tmp   空间复杂度   注意事项   tco   return   lintcode   

原文地址:https://www.cnblogs.com/573583868wuy/p/8763959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!