⬆︎
×

[PAT-A] 1029 Median

Hyplus目录

Java

package PAT_A1029_Median;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // 序列1
        String[] line = reader.readLine().split(" ");
        int N1 = Integer.parseInt(line[0]);
        long[] num1 = new long[N1 + 1];
        for (int i = 0; i < N1; i++)
            num1[i] = Long.parseLong(line[i + 1]);

        // 序列2
        line = reader.readLine().split(" ");
        int N2 = Integer.parseInt(line[0]);
        long[] num2 = new long[N2 + 1];
        for (int i = 0; i < N2; i++)
            num2[i] = Long.parseLong(line[i + 1]);

        // 序列最后一个元素置INF
        num1[N1] = num2[N2] = Long.MAX_VALUE;

        int cnt = 0, i = 0, j = 0;
        while (cnt < (N1 + N2 - 1) / 2) {
            if (num1[i] < num2[j]) {
                i++;
            } else {
                j++;
            }
            cnt++;
        }

        // 输出两个序列当前位置较小的元素
        System.out.println(Math.min(num1[i], num2[j]));
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 200010;

int n, m;
int a[N], b[N], c[N * 2];

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
    scanf("%d", &m);
    for (int i = 0; i < m; ++i) scanf("%d", &b[i]);

    int i = 0, j = 0, k = 0;
    while (i < n && j < m) {
        if (a[i] <= b[j]) c[k++] = a[i++];
        else c[k++] = b[j++];
    }
    while (i < n) c[k++] = a[i++];
    while (j < m) c[k++] = b[j++];

    if (k % 2 == 1) printf("%d\n", c[k / 2]);
    else printf("%d\n", c[k / 2 - 1]);

    return 0;
}

发表评论