有史以来最大数量的恐龙[重复]

Posted

技术标签:

【中文标题】有史以来最大数量的恐龙[重复]【英文标题】:largest number of dinosaurs that were ever alive [duplicate] 【发布时间】:2013-02-02 04:12:51 【问题描述】:

可能重复:algorthim to solve find max no at a time

给定一个由 2n 个整数组成的数组,其中该整数数组中的每一对分别代表恐龙的出生年份和死亡年份。我们要考虑的有效年份范围是 [-100000 到 2005]。例如,如果输入是:

-80000 -79950 20 70 22 60 58 65 1950 2004

这意味着第一只恐龙的出生年份分别为 –80000 年和死亡年份 –79950 年。类似地,第二只恐龙的寿命从 20 岁到 70 岁,以此类推。

我们想知道同时存在的最大数量的恐龙。给定上面的 2n 个整数数组,编写一个方法来计算它。

这是我迄今为止尝试过的:

#include<stdio.h>
#include<stdlib.h>
#include <stddef.h>

static void insertion_sort(int *a, const size_t n) 

    size_t i, j;
    int value;
    for (i = 1; i < n; i++) 
        value = a[i];
        for (j = i; j > 0 && value < a[j - 1]; j--) 
            a[j] = a[j - 1];
        
        a[j] = value;
    


int  main()
    int arr[10]=-80000,-79950,20,70,22,60,58,65,1950,2004;
    int strt[5],end[5];
    int bal[5];
    int i,j,k,l,m,length;
    l=0;
    m=0;

    for (i=0; i<10; i++)
        //printf("i = %2d arr[i] = %2d\n", i, arr[i]);
        if(i%2==0) 
            strt[l]=arr[i];
            l++;
         else 
            end[m]=arr[i];
            m++;
        
    

    insertion_sort(strt, sizeof strt / sizeof strt[0]);
    insertion_sort(end, sizeof end / sizeof end[0]);
    k=sizeof(end)/sizeof(int);

    for(j=0;j<5;j++) 
        bal[i]=strt[i]-end[k-1];
        k--;
    
    length=sizeof bal / sizeof bal[0];
    insertion_sort(bal, sizeof bal / sizeof bal[0]);
    printf("answer is = %2d",bal[length-1]);

【问题讨论】:

如有疑问,请使用蛮力。 【参考方案1】:

我会这样做:

    创建一个地图来保存数据 成对阅读 对于 i = pair.first 到 pair.second ++map[i] 如果有更多对,从 2 开始重复 在地图中找到计数最多的元素。该元素的关键是年份。

理论上,您可以使用矢量而不是地图,但它可能会因为人口稀少而使地图更有意义。

【讨论】:

以上是关于有史以来最大数量的恐龙[重复]的主要内容,如果未能解决你的问题,请参考以下文章

没有重复的背包:最大数量的金币

没有重复的背包:最大数量的黄金 - Python 代码问题

嵌套元组的最大值[重复]

我需要找到具有最大类别的记录[重复]

每个元素的最大重复次数的组合

int 16h/ah=1 即使在用户按下另一个键后也重复给出相同的按键