-8

重複の可能性:
一度に最大数を見つけるを解決するためのアルゴリズム

2n個の整数の配列が与えられます。この整数の配列の各ペアは、それぞれ恐竜の誕生年と死亡年を表します。検討したい有効年の範囲は[-100000から2005]です。たとえば、入力が次の場合:

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

これは、最初の恐竜の誕生年がそれぞれ–80000、死亡年が–79950であることを意味します。同様に、2番目の恐竜は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]);
}
4

1 に答える 1

0

私は次のようなことをします:

  1. データを保持するためのマップを作成する
  2. ペアで読む
  3. i=pair.firstからpair.second++map[i]の場合
  4. さらにペアがある場合は、2から繰り返します
  5. マップ内でカウントが最大の要素を見つけます。その要素の鍵は年です。

理論的には、マップの代わりにベクトルを使用することもできますが、マップがより意味をなすように、おそらく十分にまばらに配置されるでしょう。

于 2013-02-02T04:55:01.620 に答える