• 寻找主元素


    主元素这个问题,有个nlogn的算法,但是还有比它更快的,有O(n)的算法,基本思想是,从头到尾遍历,先将第一个元素保存到一个变量中,然后依次往后遍历,每遍历到与它的值相同的元素时,就要将它的个数+1, 不同时-1, 这样是因为如果存在主元素,那么主元素的个数一定是大于n/2的,所以最后这样抵消下来剩下的一定是主元素,如果判断它不存在呢,就需要再遍历一遍,看最后找到的这个是不是主元素,其中有个细节就是当那个保存的个数减到0的时候怎么办,如果减到零,就让它等于当前遍历到的这个元素,代码如下,

     1 #include <stdio.h>
     2 const int N = 1000;
     3 int a[N];
     4 
     5 int main()
     6 {
     7     int n;
     8     while (~scanf("%d", &n))
     9     {
    10         for (int i = 0; i < n; i++)
    11             scanf("%d", &a[i]);
    12             
    13         int cur_value = a[0], cur_count = 1;/*cur_value用来保存当前容器中的值,
    14         cur_count表示当前值为cur_value的个数 */
    15         for (int i = 1; i < n; i++)
    16         {
    17             if (cur_count == 0)//如果抵消完,将它的值改成当前遍历到元素的值 
    18             {
    19                 cur_count = 1;
    20                 cur_value = a[i];
    21             }
    22             else
    23             {
    24                 if (cur_value == a[i])//如果相等,就++ 
    25                 {
    26                     cur_count++;
    27                 }
    28                 else//不等,就-- 
    29                     cur_count--;
    30             }
    31         }
    32         int cnt = 0;
    33         for (int i = 0; i < n; i++)//判断是否存在主元素 
    34             if (cur_value == a[i])
    35                 cnt++;
    36         if (cnt > n / 2)
    37             printf("%d
    ", cur_value);
    38         else
    39             puts("NO");
    40     }
    41     
    42     
    43     return 0;
    44 }
  • 相关阅读:
    ng-if 下ng-model失效 ng-repeat循环输出单选框
    ng-repeat输出当前值,ng-class的使用
    SQL-select中使用条件判断语句
    JS-Ajax
    ASP.NET-缓存Cache
    MVC-Filter-脚本注入
    三层架构与MVC的区别
    MVC-Route
    cookie-session
    初衷
  • 原文地址:https://www.cnblogs.com/Howe-Young/p/4149890.html
Copyright © 2020-2023  润新知