hdu 2019 数列有序!【归并】

数列有序!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 104575    Accepted Submission(s): 43675


Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
 

Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
 

Output
对于每个测试实例,输出插入新的元素后的数列。
 

Sample Input
 
  
3 3 1 2 4 0 0


做法很多,我这里用的归并,时间复杂度为O(n+m),由于m始终为1,所以最终时间复杂度O(n)。

import java.util.Scanner;

public class Main {
    public  static int[]  merge(int[] a,int[] b)
    {
        int[] c = new int[a.length+b.length];
        int i = 0;
        int j = 0;
        int k = 0;
        while(i < a.length && j < b.length)
        {
            if(a[i] <= b[j])
            {
                c[k++] = a[i++];
            }
            else
            {
                c[k++] = b[j++];
            }
        }
        if(i == a.length)
        {
            while(j < b.length)
            {
                c[k++] = b[j++];
            }
        }
        else if(j == b.length)
        {
            while(i < a.length)
            {
                c[k++] = a[i++];
            }
        }
        return c;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext())
        {
            int n = sc.nextInt();
            int m = sc.nextInt();
            if(n == 0 && m == 0)
            {
                break;
            }
            int[] a = new int[n];
            int[] b = new int[1];
            for(int i = 0;i < n;i++)
            {
                a[i] = sc.nextInt();
            }
            b[0] = m;
            int c[] = merge(a, b);
            for(int i = 0;i < c.length;i++)
            {
                if(i == c.length-1)
                {
                    System.out.print(c[i]);
                    break;
                }
                System.out.print(c[i]+" ");
            }
            System.out.println();
        }
    }

}

猜你喜欢

转载自blog.csdn.net/qq_34229351/article/details/80054707